single
Adicionando Elementos
Deslize para mostrar o menu
Para tornar sua lista simplesmente encadeada útil, é necessário adicionar nós a ela. Você irá implementar a lógica para inserir nós na lista. Você criará novos nós, conectará esses nós e os integrará para que a lista cresça dinamicamente à medida que elementos são adicionados.
Essa abordagem prática ajuda a compreender exatamente o que acontece nos bastidores.
Implementação da Inserção de Nós
Vamos escrever uma função simples para criar um nó. Essa função deve:
- Receber como argumento um número do tipo int, que será armazenado no campo data do nó;
- Criar um ponteiro para uma área de memória alocada dinamicamente (considerando o tamanho do nó);
- Verificar o sucesso da alocação de memória para o nó;
- Colocar o valor necessário (argumento da função) no campo data;
- O ponteiro next deve ser NULL, já que a função cria apenas um nó;
- A função deve retornar um ponteiro para a área de memória onde o valor está armazenado.
A função AddNewNode() recebe um ponteiro para ponteiro, pois pode alterar o valor do ponteiro para o primeiro nó (head) da lista, assim como o valor que será armazenado no novo nó:
void AddNewNode(struct Node** head, int value)
{
...
}
Se a lista estiver vazia (*head == NULL), basta atualizar o ponteiro para o início da lista (*head) para apontar para o novo nó (newNode), nesse caso newNode se tornará o primeiro nó (nó head). No caso de uma lista não vazia, utiliza-se um loop para procurar o último nó.
O nó atual atua como um nó buffer, permitindo iterar pela lista e encontrar um nó que não aponta para nenhum outro (*next == NULL).
struct Node* current = *head;
while (current->next != NULL)
{
...
}
Ao final, é necessário tornar o novo nó newNode o último nó, o que significa que current->next deve ser igual a newNode. Agora, newNode é o último nó da lista.
Como tarefa, é preciso identificar e adicionar uma função para inserir novos nós em nós já existentes.
Deslize para começar a programar
Criar uma função addNewNode que adiciona um novo nó ao final de uma lista simplesmente encadeada.
Dentro da função:
- Declarar uma variável
struct Node* newNodee criar um novo nó utilizandocreateNode(value). - Verificar se a lista está vazia testando
*head == NULL. - Se a lista estiver vazia, atribuir
newNodea*head. - Se a lista não estiver vazia, declarar
struct Node* currente atribuí-la a*head. - Percorrer a lista utilizando um laço
whileaté quecurrent->nextsejaNULL. - Após alcançar o último nó, definir
current->next = newNode.
Solução
Obrigado pelo seu feedback!
single
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo