Online C Compiler
Abrir no compilador

Edição didática em português. O código e suas saídas preservam o original.

Lista simplesmente encadeada em C

Crie, percorra e libere nós ligados por ponteiros.

Abrir no compilador

Lista simplesmente encadeada em C
Crie, percorra e libere nós ligados por ponteiros.

Cada nó guarda um dado e um ponteiro para o próximo nó. head aponta para o primeiro; NULL indica o final ou uma lista vazia. Ao contrário de um array, os nós não precisam ocupar endereços consecutivos.

Verifique malloc antes de escrever em um nó. Ao inserir ou remover, preserve a ligação com o restante da lista e atualize head se o primeiro nó mudar. Buscar um valor exige percorrer a lista e custa O(N).

Para liberar a lista, salve o próximo ponteiro antes de chamar free no nó atual. Teste listas vazias, com um nó e com vários nós; nunca consulte um nó depois de liberá-lo.

Código C

#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int data;
    struct Node *next;
} Node;

Node* insertHead(Node *head, int val) {
    Node *newNode = (Node *)malloc(sizeof(Node));
    newNode->data = val;
    newNode->next = head;
    return newNode;
}

void printList(Node *head) {
    Node *curr = head;
    while (curr != NULL) {
        printf("%d -> ", curr->data);
        curr = curr->next;
    }
    printf("NULL\n");
}

void freeList(Node *head) {
    Node *curr = head;
    while (curr != NULL) {
        Node *temp = curr;
        curr = curr->next;
        free(temp);
    }
}

int main() {
    Node *head = NULL;
    head = insertHead(head, 30);
    head = insertHead(head, 20);
    head = insertHead(head, 10);

    printf("Linked List: ");
    printList(head);

    freeList(head);
    return 0;
}
Abrir no compilador

Saída esperada

Linked List: 10 -> 20 -> 30 -> NULL

Perguntas frequentes

Por que o código e a saída continuam em inglês?

Palavras-chave, identificadores e textos verificados pelos testes são preservados para não alterar o programa. As explicações e os controles estão traduzidos.