Una lista semplicemente concatenata
Esplori nodi, ownership e attraversamento.
Una lista semplicemente concatenata è una lezione Zig Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Zig Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Zig Academy include 4 lezioni in totale.
Che cos’è una lista concatenata
Una lista semplicemente concatenata collega tra loro i valori: ogni nodo contiene un valore e un puntatore al nodo successivo, oppure null alla fine. 🔗
Definire il nodo
Un nodo è una struct con un valore e un puntatore optional al nodo successivo. Optional significa che l’ultimo nodo punta a null.
const Node = struct {
value: i32,
next: ?*Node,
};Perché il puntatore è optional
L’uso di ?*Node consente alla catena di terminare in modo sicuro. Non serve un valore sentinella speciale per indicare la coda.
next: ?*NodeLa lista tiene traccia della testa
La lista ricorda semplicemente il primo nodo, chiamato head, oltre all’allocator che possiede tutti i nodi.
const List = struct {
head: ?*Node,
alloc: std.mem.Allocator,
};Allocare un nodo
Per aggiungere un valore, chieda all’allocator di create un singolo Node nell’heap. Questo restituisce un puntatore a una nuova area di memoria.
const node = try self.alloc.create(Node);Inserire in testa
L’inserimento più economico avviene in testa: faccia puntare il nuovo nodo alla vecchia head, quindi lo renda la nuova head. L’operazione è a tempo costante.
node.* = .{ .value = v, .next = self.head };
self.head = node;Percorrere la catena
Per attraversarla, inizi dalla head e segua ogni puntatore next fino a raggiungere null. Un ciclo while rappresenta bene il nodo.
var cur = self.head;
while (cur) |n| {
std.debug.print("{d}\n", .{n.value});
cur = n.next;
}La capture estrae l’optional
La scrittura while (cur) |n| esegue il corpo solo finché cur non è null e n è il puntatore estratto dall’optional. Il ciclo termina con null.
while (cur) |n| { ... }Ogni nodo è di Sua proprietà
Ogni nodo proviene dall’allocator, quindi deve essere restituito. Dimenticarne anche uno causa una perdita che l’allocator di test segnalerà.
Liberare l’intera lista
Percorra la catena in deinit, ma salvi next prima di liberare il nodo, perché il nodo scompare nel momento in cui lo distrugge.
var cur = self.head;
while (cur) |n| {
const nxt = n.next;
self.alloc.destroy(n);
cur = nxt;
}Renderla generica
Racchiuda Node e List in una funzione che restituisce un tipo, così la lista funziona con qualsiasi tipo di elemento, non solo i32.
fn LinkedList(comptime T: type) type {
return struct {
const Node = struct { value: T, next: ?*Node };
};
}Verifica rapida
Sta liberando una lista concatenata nodo per nodo. Che cosa deve fare prima di distruggere ogni nodo?
Riepilogo
I nodi contengono un valore e un puntatore next optional. La lista tiene traccia della head e di un allocator, inserisce in testa e libera i nodi uno alla volta. 🎯
Domande Frequenti
La lezione «Una lista semplicemente concatenata» è gratuita?
Sì — il testo completo di «Una lista semplicemente concatenata» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Zig Academy, passa a CoddyKit PRO. Il corso Zig Academy include 4 lezioni in totale.
Cosa imparerò in «Una lista semplicemente concatenata»?
Esplori nodi, ownership e attraversamento. Eserciti Zig Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Zig Academy?
Non è richiesta alcuna esperienza precedente. Zig Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Una lista semplicemente concatenata»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Zig Academy?
Sì. Ogni lezione Zig Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Uno stack generico da zero
- Una lista semplicemente concatenata
- Utilizzare HashMap e AutoHashMap
- Profilazione e compromessi sulla sicurezza