首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言基礎

C語言實現雙向循環鏈表:節點刪除操作詳解

     編輯:C 語言基礎

雙向循環鏈表刪除操作核心邏輯

刪除節點是插入操作的逆過程。在雙向循環鏈表中,若要刪除連續三個節點 s、p、q 中的 p,只需將 s->rlink 指向 q,q->llink 指向 s,然後釋放 p 的記憶體即可。

刪除函數實現

void del(stud *p) {
    (p->rlink)->llink = p->llink;
    (p->llink)->rlink = p->rlink;
    free(p);
}

完整程式範例(刪除流程)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10

typedef struct node {
    char name[20];
    struct node *llink, *rlink;
} stud;

stud *creat(int n) { /* 建表代碼同上,略 */ }
stud *search(stud *h, char *x) { /* 查找代碼同上,略 */ }
void print(stud *h) { /* 列印代碼同上,略 */ }
void del(stud *p) { /* 刪除實現見上 */ }

int main() {
    int number = N;
    char studname[20];
    stud *head, *searchpoint;
    head = creat(number);
    print(head);
    printf("請輸入要刪除的人的姓名:");
    scanf("%s", studname);
    searchpoint = search(head, studname);
    if (searchpoint) {
        del(searchpoint);
        printf("刪除後:\n");
        print(head);
    }
    return 0;
}

注意事項

  • 刪除前務必確認節點存在,避免釋放空指針導致崩潰。
  • 若刪除的是頭節點後的第一個數據節點或尾節點,邏輯同樣適用,因為頭節點參與循環。
  • 釋放記憶體後,被刪節點指針不應再被使用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved