Online C Compiler
Buka di kompiler

Edisi pembelajaran bahasa Indonesia. Kode dan keluarannya tetap seperti aslinya.

Doubly linked list dalam C

Pertahankan tautan maju dan mundur saat menyisipkan atau menghapus node.

Buka di kompiler

Doubly linked list dalam C
Pertahankan tautan maju dan mundur saat menyisipkan atau menghapus node.

Node memiliki next dan prev. Hal ini memungkinkan penelusuran ke dua arah, tetapi membutuhkan pointer tambahan dan pembaruan tautan yang konsisten pada setiap operasi.

Saat menyisipkan di antara dua node, hubungkan kedua sisi dan perbaiki tautan baliknya. Saat menghapus, hubungkan tetangganya sebelum membebaskan node. Node pertama tidak memiliki pendahulu dan node terakhir tidak memiliki penerus.

Periksa konsistensi dengan menelusuri maju dan mundur. Uji penghapusan head, tail, serta satu-satunya node. Bebaskan seluruh objek yang dialokasikan setelah selesai.

Kode C

#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;
}
Buka di kompiler

Keluaran yang diharapkan

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

Pertanyaan umum

Mengapa kode dan keluarannya tetap dalam bahasa Inggris?

Kata kunci, pengenal, dan teks yang diperiksa tes dipertahankan agar program tidak berubah. Penjelasan dan kontrol telah diterjemahkan.