Zig Academy · Lección

Una lista enlazada simple

Nodos, propiedad y recorrido.

Lección 2 de 413 pasos

Una lista enlazada simple es una lección gratuita de Zig Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Zig Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Zig Academy incluye 4 lecciones en total.

Qué es una lista enlazada

Una lista simplemente enlazada encadena valores: cada nodo contiene un valor y un puntero al nodo siguiente, o null al final. 🔗

Defina el nodo

Un nodo es un struct con un valor y un puntero opcional al nodo siguiente. Opcional significa que el último nodo apunta a null.

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

Por qué el puntero es opcional

Usar ?*Node permite terminar la cadena de forma segura. No hace falta un valor centinela especial para marcar el final.

next: ?*Node

La lista sigue la cabeza

La lista solo recuerda el primer nodo, llamado cabeza, además del asignador que posee todos los nodos.

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

Asigne un nodo

Para añadir un valor, pida al asignador que cree un único Node en el heap. Esto devuelve un puntero a almacenamiento nuevo.

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

Inserte al principio

La inserción más barata se hace en la cabeza: apunte el nodo nuevo a la cabeza anterior y conviértalo en la nueva cabeza. Se ejecuta en tiempo constante.

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

Recorra la cadena

Para recorrerla, empiece en head y siga cada puntero next hasta llegar a null. Un bucle while representa bien este recorrido.

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

La captura desenvuelve el opcional

Escribir while (cur) |n| ejecuta el cuerpo solo mientras cur no sea null, y n es el puntero desenvuelto. El bucle termina al llegar a null.

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

Cada nodo es suyo

Cada nodo procede del asignador, así que debe devolverlo. Olvidar siquiera uno es una fuga que el asignador de pruebas notificará.

Libere toda la lista

Recorra la cadena en deinit, pero guarde next antes de liberar el nodo, porque desaparece en el momento en que lo destruye.

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

Hágala genérica

Incluya Node y List en una función que devuelva un tipo para que la lista funcione con cualquier tipo de elemento, no solo con i32.

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

Comprobación rápida

Está liberando una lista enlazada nodo por nodo. ¿Qué debe hacer antes de destruir cada nodo?

Resumen

Los nodos contienen un valor y un puntero next opcional. La lista sigue la cabeza y un asignador, inserta al principio y libera los nodos uno por uno. 🎯

Gratis para empezar

Aprende Zig con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
30
Lecciones
120

Preguntas frecuentes

¿La lección «Una lista enlazada simple» es gratis?

Sí — el texto completo de «Una lista enlazada simple» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Zig Academy, actualiza a CoddyKit PRO. El curso de Zig Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Una lista enlazada simple»?

Nodos, propiedad y recorrido. Practicas Zig Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Zig Academy?

No se requiere experiencia previa. Zig Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Una lista enlazada simple»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Zig Academy?

Sí. Cada lección de Zig Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Una pila genérica desde cero
  2. Una lista enlazada simple
  3. Usar HashMap y AutoHashMap
  4. Perfilado y compromisos de seguridad
← Volver a Zig Academy