91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

c語言雙向鏈表如何刪除節點

小樊
82
2024-07-08 19:37:24
欄目: 編程語言

刪除雙向鏈表中的節點需要考慮以下幾種情況:

  1. 刪除頭節點:如果要刪除的節點是頭節點,需要將頭節點指針指向下一個節點,并釋放原來的頭節點內存。

  2. 刪除尾節點:如果要刪除的節點是尾節點,需要將尾節點的前一個節點的next指針指向NULL,并釋放原來的尾節點內存。

  3. 刪除中間節點:如果要刪除的節點是中間節點,需要將該節點的前一個節點的next指針指向該節點的下一個節點,同時將該節點的下一個節點的prev指針指向該節點的前一個節點,并釋放原來的節點內存。

下面是一個示例代碼,用來刪除雙向鏈表中的某個節點:

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

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

Node* deleteNode(Node* head, Node* node) {
    if (head == NULL || node == NULL) {
        return head;
    }

    if (head == node) {
        head = node->next;
    }

    if (node->prev != NULL) {
        node->prev->next = node->next;
    }

    if (node->next != NULL) {
        node->next->prev = node->prev;
    }

    free(node);
    
    return head;
}

int main() {
    Node* head = NULL;
    Node* node1 = (Node*)malloc(sizeof(Node));
    Node* node2 = (Node*)malloc(sizeof(Node));

    head = node1;
    node1->data = 1;
    node1->prev = NULL;
    node1->next = node2;

    node2->data = 2;
    node2->prev = node1;
    node2->next = NULL;

    head = deleteNode(head, node1);

    Node* current = head;
    while (current != NULL) {
        printf("%d\n", current->data);
        current = current->next;
    }

    return 0;
}

在上面的示例代碼中,deleteNode函數用來刪除雙向鏈表中的某個節點,main函數創建了一個雙向鏈表并刪除了其中的一個節點。

0
金沙县| 澎湖县| 杭锦后旗| 岳阳县| 冀州市| 方山县| 宁河县| 永康市| 敦化市| 舒城县| 长岛县| 连南| 鱼台县| 平顺县| 攀枝花市| 镶黄旗| 宁阳县| 资兴市| 榆中县| 阜南县| 尼木县| 叙永县| 正安县| 竹山县| 南川市| 西林县| 邹城市| 吉林省| 元朗区| 绥江县| 沈丘县| 锦州市| 临泽县| 平和县| 西藏| 临桂县| 海丰县| 霞浦县| 扎囊县| 青阳县| 荥经县|