循环双链表

1. 空表:两个方向都回到头结点

带头结点循环双链表的空表满足 head->next == headhead->prior == head

head->next = head;
head->prior = head;

2. 后插不用判断尾结点

普通双链表尾结点后继为 NULL;循环双链表尾结点后继为头结点,所以后继一定存在。

newNode->next = prev->next;
prev->next->prior = newNode;
newNode->prior = prev;
prev->next = newNode;

3. 删除后继不用判断空后继

target->next 至少能指向头结点。真正需要注意的是题目是否允许删除头结点。

DNode *target = prev->next;
prev->next = target->next;
target->next->prior = prev;
free(target);