Online C Compiler
Openen in de compiler

Nederlandse leereditie

Dubbel gekoppelde lijst in C

Beheer koppelingen vooruit en achteruit en controleer of knopen consistent blijven.

Openen in de compiler

Dubbel gekoppelde lijst in C
Beheer koppelingen vooruit en achteruit en controleer of knopen consistent blijven.

Elke knoop heeft next en prev om in twee richtingen te doorlopen. Dat vereist een extra pointer en consistente updates aan beide kanten.

Verbind bij invoegen tussen twee buren beide kanten en herstel de terugkoppelingen. Verbind bij verwijderen eerst de buren en geef daarna de knoop vrij. De eerste heeft geen vorige en de laatste geen volgende.

Controleer de lijst door in beide richtingen te lopen. Test verwijderen van kop, staart en de enige knoop. Geef uiteindelijk alle reserveringen vrij.

Broncode

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

typedef struct DNode {
    int data;
    struct DNode *prev;
    struct DNode *next;
} DNode;

DNode* insertHead(DNode *head, int val) {
    DNode *newNode = (DNode *)malloc(sizeof(DNode));
    newNode->data = val;
    newNode->prev = NULL;
    newNode->next = head;
    if (head != NULL) head->prev = newNode;
    return newNode;
}

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

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

int main() {
    DNode *head = NULL;
    head = insertHead(head, 300);
    head = insertHead(head, 200);
    head = insertHead(head, 100);

    printf("Doubly Linked List: ");
    printForward(head);

    freeDList(head);
    return 0;
}
Openen in de compiler

Verwacht resultaat

Doubly Linked List: 100 <-> 200 <-> 300 <-> NULL

Veelgestelde vragen

Waarom blijven code en sommige resultaten Engels?

C-sleutelwoorden, namen, programmacommentaar en verwachte uitvoer blijven gelijk aan het origineel om uitvoerbare code en consistente tests te behouden. Uitleg en instructies zijn vertaald.