typedef struct node {
char name[20];
struct node *llink, *rlink; // 左/右鏈指標
} stud;
llink:指向直接前驅節點rlink:指向直接後繼節點h 的 rlink 指向第一個資料節點,llink 指向最後一個資料節點creat(n)name[0]='\0'、雙鏈指向自己。h->llink = 最後節點; 最後節點->rlink = h;search(h, x)h->rlink 開始遍歷,直到回到 h。strcmp 比對姓名,找到回傳節點指標,否則列印錯誤。print(h)h->rlink 遍歷至 h,輸出每個節點姓名。insert(p) —— 在節點 p 之後插入void insert(stud *p) {
stud *s = malloc(sizeof(stud));
printf("請輸入要插入的姓名: ");
scanf("%s", stuname);
strcpy(s->name, stuname);
s->rlink = p->rlink; // 新節點右鏈指向 p 的後繼
p->rlink = s; // p 右鏈指向新節點
s->llink = p; // 新節點左鏈指向 p
(s->rlink)->llink = s; // 原後繼節點左鏈指向新節點
}
四步完成雙向鏈接,順序關鍵:先連新節點的雙鏈,再修改鄰居指向。
head = creat(N)。search() 取得節點指標。insert() 在該節點後插入新節點。malloc 需檢查回傳值是否為 NULL。free 目標節點。雙向循環鏈結串列適合需雙向遍歷、頻繁插入刪除、環狀輪詢的場景:音樂播放清單、圓桌會議發言順序、作業系統行程排程等。