Una lista doblemente enlazada en C
Dos punteros por nodo: insertar y quitar no requieren recorrido.
#include <stdlib.h>
typedef struct Node {
int value;
struct Node *prev;
struct Node *next;
} Node;
Node *push_front(Node *head, int value) {
Node *node = malloc(sizeof *node);
if (node == NULL) {
return head;
}
node->value = value;
node->prev = NULL;
node->next = head;
if (head != NULL) {
head->prev = node;
}
return node;
}
Node *unlink_node(Node *head, Node *node) {
if (node->prev != NULL) {
node->prev->next = node->next;
} else {
head = node->next;
}
if (node->next != NULL) {
node->next->prev = node->prev;
}
free(node);
return head;
}
Cómo funciona
- Cada nodo conoce a su predecesor y a su sucesor.
- Quitar un nodo conecta a sus vecinos entre sí.
- Los casos de cabeza y cola son los que se rompen.
Palabras clave y builtins usados aquí
NULLelseifintreturnsizeofstructtypedef
El intento, en números
- Líneas
- 34
- Caracteres a escribir
- 545
- Tokens
- 181
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 109 segundos.
Paso 2 de 5 en Listas y pilas; paso 7 de 20 en Estructuras de datos y algoritmos.