The problem is:
Make a function to remove the first n elements of an integer list. The function should return whether the operation was possible or not (true: it was possible, false: could not).
Below the List and the NoList
public class Lista
{
/// <summary>
/// Referência do primeiro nó (elemento) da lista
/// </summary>
public NoLista InicioLista { get; set; }
/// <summary>
/// Construtora da classe lista
/// </summary>
public Lista()
{
InicioLista = null;
}
/// <summary>
/// Remove um valor da lista
/// </summary>
/// <param name="valor">Valor a ser removido</param>
/// <returns>true se encontrar e false se não encontrar</returns>
public bool Remove(int valor)
{
bool valorRetorno = false;
NoLista auxiliar = InicioLista;
//int i;
//int n = valor;
//for (i = 0 ; i < n ; i++) {
// Verificar se a lista está vazia
if (auxiliar != null) {
// Percorrer lista (navegar) até achar o nó com o valor desejado
while ((auxiliar != null) && (auxiliar.informacao != valor)) {
// Passa para o próximo elemento da lista
auxiliar = auxiliar.proximo;
}
// So atualizar a lista se o valor foi encontrado
if (auxiliar.informacao == valor) {
// Verificar se existe um proximo elemento na lista
if (auxiliar.proximo != null) {
// Remover a referencia do nó anterior
(auxiliar.proximo).anterior = null;
}
// Verificar se é o primeiro da lista
if (InicioLista.informacao == valor) {
InicioLista = InicioLista.proximo;
}
else {
// Verificar se existe um proximo elemento na lista
if (auxiliar.proximo != null) {
(auxiliar.proximo).anterior = auxiliar.anterior;
}
// Fazer o anterior do auxiliar apontar para o proximo do auxiliar
(auxiliar.anterior).proximo = auxiliar.proximo;
}
}
}
//}
return valorRetorno;
}
/// <summary>
/// Adiona um novo valor na lista
/// </summary>
/// <param name="valor">Valor a ser adicionado</param>
public void Add(int valor)
{
NoLista novoNo = new NoLista();
novoNo.informacao = valor;
// Verificar se é o primeiro da lista
if (InicioLista == null)
{
InicioLista = novoNo;
}
else
{
NoLista auxiliar = InicioLista;
while (auxiliar.proximo != null)
{
auxiliar = auxiliar.proximo;
}
auxiliar.proximo = novoNo;
novoNo.anterior = auxiliar;
}
}
public Lista Concatenar (Lista l1, Lista l2) {
var novaLista = new Lista ( );
Add1 (novaLista, l1);
Add1 (novaLista, l2);
return novaLista;
}
private static void Add1 (Lista nova, Lista velha) {
NoLista p = velha.InicioLista;
nova.Add (p.informacao);
while (p.proximo != null) {
p = p.proximo;
nova.Add (p.informacao);
}
}
public void Imprime()
{
NoLista auxiliar = InicioLista;
Console.WriteLine("Imprimindo a lista");
// Percorrer a lista até o fim
while (auxiliar != null)
{
// Imprimir o valor
Console.WriteLine(auxiliar.informacao);
// Navegar para o próximo nó
auxiliar = auxiliar.proximo;
}
}
}
public class NoLista
{
/// <summary>
/// Aramazena a informação
/// </summary>
public int informacao { get; set; }
/// <summary>
/// Referência para o próximo nó (elemento) na lista
/// </summary>
public NoLista proximo { get; set; }
/// <summary>
/// Referência para o nó (elemento) anterior na lista
/// </summary>
public NoLista anterior { get; set; }
/// <summary>
/// Construtora da classe NoLista
/// </summary>
public NoLista()
{
informacao = -1;
proximo = null;
anterior = null;
}
}