public bool VerificaIntermedios() { Lista ListaAux = new Lista(); //Lista auxiliar para receber apenas o elementos desejados. int cont = 1, cont2 = 1; int PosiInicial = 1; bool primeiraEntrada = false; Aux = Inicio; if (Aux.Prox == null) { return(false); } while (Aux != null) { if (Aux.Prox != null) { if (Aux.Cor != Aux.Prox.Cor && cont >= 3) //Verifica se o próximo elemento é diferente do atual, caso seja true, verifica se o contador { // de elementos é maior ou igual a 3, caso seja temos o tamanho da sequencia e podemos sair do loop break; } if (Aux.Cor == Aux.Prox.Cor) //Caso o proximo elemento tenha a mesma cor do atual. { if (primeiraEntrada == false) //Caso seja a primeira vez que isso ocorre, salva a posição inicial da sequência de elementos. { PosiInicial = cont2; primeiraEntrada = true; //Torna a variável bool em true, para não altera a posicao inicial da sequência. } cont++; //Incrementa a quantidade de elementos da mesma cor em sequência. } else { primeiraEntrada = false; //Torna a variável bool em false, para caso encontre-se uma sequencia de elementos de cor igual cont = 1; //salve a posição do primeiro elemento } } Aux = Aux.Prox; cont2++; //contador para contar cada posição da lista. } if (cont >= 3) //Caso haja 3 ou mais elementos em sequência. { cont2 = Tamanho; Aux = Fim; while (Aux != null) { if (cont2 < PosiInicial || cont2 > PosiInicial + (cont - 1)) //Verifica se a posicão atual é diferente dos elementos em sequência. { ListaAux.InserirInicio(Aux.Cor); //Caso seja insere o elemento na lista auxiliar. } Aux = Aux.Ant; cont2--; } this.EsvaziarLista(); //Esvazia a lista original. ListaAux.Aux = ListaAux.Fim; while (ListaAux.Aux != null) //Passa todos os elementos da lista auxiliar para a lista original. { this.InserirInicio(ListaAux.Aux.Cor); ListaAux.Aux = ListaAux.Aux.Ant; } if (cont == 3) //Calcula a pontuação { Pontuacao += 2; } else if (cont > 3) { Pontuacao += 3; } Aux = null; return(true); //Retorna true, para não se realizar as outras verificações. } Aux = null; return(false); }
static void Main(string[] args) { int Op; Lista MinhaLista = new Lista(); // Instância da classe do { Console.Clear(); Console.WriteLine("LISTA DUPLAMENTE ENCADEADA - NÃO ORDENADA"); // Menu de Opções Console.WriteLine("=========================================\n"); Console.WriteLine("Opções: \n"); Console.WriteLine("1 - Inserir Elemento no Início da Lista"); Console.WriteLine("2 - Inserir Elemento no Final da Lista"); Console.WriteLine("3 - Mostrar os Elementos da Lista do Início ao Fim"); Console.WriteLine("4 - Mostrar os Elementos da Lista do Fim ao Início"); Console.WriteLine("5 - Remover Elemento da Lista"); Console.WriteLine("6 - Esvaziar a Lista"); Console.WriteLine("7 - Trocar dois elementos"); Console.WriteLine("8 - Sair\n"); Console.Write("Digite sua Opção: "); Op = int.Parse(Console.ReadLine()); if (Op == 1) // Inserir no Início da Lista { int x; // Valor a ser inserido Console.Clear(); // Limpa a Tela Console.Write("Digite um Número Inteiro: "); x = int.Parse(Console.ReadLine()); // Lê o valor a ser inserido MinhaLista.InserirInício(x); // Chama o método Console.WriteLine("\nElemento inserido na lista... Tamanho: {0}\n\n", MinhaLista.Tamanho); Console.ReadKey(); } if (Op == 2) // Inserir no Final da Lista { int x; // Valor a ser inserido Console.Clear(); // Limpa a Tela Console.Write("Digite um Número Inteiro: "); x = int.Parse(Console.ReadLine()); // Lê o valor a ser inserido MinhaLista.InserirFinal(x); // Chama o método Console.WriteLine("\nElemento inserido na lista... Tamanho: {0}\n\n", MinhaLista.Tamanho); Console.ReadKey(); } if (Op == 3) // Listar os Elementos da Lista do Início ao Fim { MinhaLista.MostraListaINIFIM(); } if (Op == 4) // Listar os Elementos da Lista do Fim ao Início { MinhaLista.MostraListaFIMINI(); } if (Op == 5) // Retirar um Elemento da Lista { int x; // Valor a ser retirado Console.Clear(); // Limpa a Tela Console.Write("Digite um Número Inteiro: "); // Lê o valor a ser inserido x = int.Parse(Console.ReadLine()); MinhaLista.RetiraElemento(x); // Chama o método } if (Op == 6) // Esvaziar a Lista { Console.Clear(); // Limpa a Tela MinhaLista.EsvaziarLista(); // Chama o Método Console.WriteLine("Lista Vazia!!\n\n"); Console.ReadKey(); } if (Op == 7) { Console.Clear(); MinhaLista.InserirFinal(1); MinhaLista.InserirFinal(2); MinhaLista.InserirFinal(3); MinhaLista.InserirFinal(4); MinhaLista.TrocarElementos(1, 3); MinhaLista.MostraListaINIFIM(); Console.ReadKey(); } } while (Op != 8); }