Zig Academy · Aula

Uma lista simplesmente encadeada

Nós, propriedade e travessia.

Aula 2 de 413 etapas

Uma lista simplesmente encadeada é uma aula grátis de Zig Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Zig Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Zig Academy inclui 4 aulas no total.

O que é uma lista encadeada

Uma lista simplesmente encadeada conecta valores: cada nó contém um valor e um ponteiro para o próximo nó, ou null no final. 🔗

Defina o Node

Um nó é uma struct com um valor e um ponteiro opcional para o próximo nó. Opcional significa que o último nó aponta para null.

const Node = struct {
    value: i32,
    next: ?*Node,
};

Por que o ponteiro é opcional

Usar ?*Node permite que a cadeia termine com segurança. Não é necessário um valor sentinela especial para marcar o final.

next: ?*Node

A lista acompanha o início

A lista em si apenas guarda o primeiro nó, chamado de início, além do alocador que possui todos os nós.

const List = struct {
    head: ?*Node,
    alloc: std.mem.Allocator,
};

Alocar um nó

Para adicionar um valor, peça ao alocador para create um único Node no heap. Isso retorna um ponteiro para um espaço de armazenamento novo.

const node = try self.alloc.create(Node);

Adicione ao início

A inserção mais barata ocorre no início: aponte o novo nó para o início antigo e transforme-o no novo início. Isso leva tempo constante.

node.* = .{ .value = v, .next = self.head };
self.head = node;

Percorra a cadeia

Para percorrer a lista, comece em head e siga cada ponteiro next até chegar a null. Um laço while representa bem esse percurso.

var cur = self.head;
while (cur) |n| {
    std.debug.print("{d}\n", .{n.value});
    cur = n.next;
}

A captura desembrulha o opcional

Escrever while (cur) |n| executa o corpo somente enquanto cur não for nulo, e n é o ponteiro desembrulhado. O laço termina em null.

while (cur) |n| { ... }

Você possui todos os nós

Cada nó veio do alocador, então cada um precisa ser devolvido. Esquecer até mesmo um deles é um vazamento que o alocador de testes informará.

Libere a lista inteira

Percorra a cadeia em deinit, mas capture next antes de liberar, pois o nó desaparece no momento em que você o destrói.

var cur = self.head;
while (cur) |n| {
    const nxt = n.next;
    self.alloc.destroy(n);
    cur = nxt;
}

Torne-a genérica

Envolva Node e List em uma função que retorna um tipo, para que a lista funcione com qualquer tipo de elemento, não apenas i32.

fn LinkedList(comptime T: type) type {
    return struct {
        const Node = struct { value: T, next: ?*Node };
    };
}

Verificação rápida

Você está liberando uma lista encadeada nó por nó. O que precisa fazer antes de destruir cada nó?

Recapitulação

Os nós contêm um valor e um ponteiro next opcional. A lista acompanha o início e um alocador, adiciona elementos ao início e libera os nós um por um. 🎯

Grátis para começar

Aprenda Zig com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
30
Aulas
120

Perguntas Frequentes

A aula “Uma lista simplesmente encadeada” é grátis?

Sim — o texto completo de “Uma lista simplesmente encadeada” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Zig Academy, atualize para CoddyKit PRO. O curso de Zig Academy inclui 4 aulas no total.

O que vou aprender em “Uma lista simplesmente encadeada”?

Nós, propriedade e travessia. Você pratica Zig Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Zig Academy?

Nenhuma experiência prévia é necessária. Zig Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Uma lista simplesmente encadeada”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Zig Academy?

Sim. Cada aula de Zig Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Uma pilha genérica do zero
  2. Uma lista simplesmente encadeada
  3. Usando HashMap e AutoHashMap
  4. Perfil de desempenho e compromissos de segurança
← Voltar para Zig Academy