Questão 3(d) da Prova 1

Questão 3(d) da Prova 1

por José Coelho de Pina -
Número de respostas: 0

ITEM 3(d)

Escreva uma função de nome duplicaLista que recebe um apontador ini para uma lista encadeada com cabeça e cria uma nova lista que é cópia da lista ini. A função deve retornar o endereço da primeira célula da nova lista.
UMA SOLUÇÃO ITERATIVA

Celula *
duplicaLista(Celula *ini)
{
  Celula *ini2, *p1, *p2;
  
  ini2 = (Celula*) mallocSafe(sizeof(Celula));
  p1 = ini->prox;
  p2 = ini2;
  
  while (p1 != NULL) 
    {
      p2->prox = (Celula*) mallocSafe(sizeof(Celula));
      p2 = p2->prox;
      p2->conteudo = p1->conteudo;
      p1 = p1->prox;
    }
  
  p2->prox = NULL;
  return ini2;
}


UMA SOLUÇÃO RECURSIVA

Celula *
duplicaLista(Celula *ini)
{ 
  Celula *ini2;

  if (ini == NULL) return NULL;
  ini2 = (Celula*) mallocSafe(sizeof(Celula));
  ini2->conteudo = ini->conteudo;
  ini2->prox = duplicaLista(ini->prox);
  return ini2;
}