●在 P(a3)节点前插入 S 节点
(1)Q = P; //先让 Q 指向 a3
(2)P = L; //P 指向第一个节点(带头结点指向头结点,不带头结点指向 a1)
(3)while(P->next != Q) P = P->next; //找到 a3 的前驱 a2,P 指向 a2
(4)S->next = P->next; //P->next 为 a3,让 S->next 等于 a3
(5)P->next = S; //a2 指针域指向节点 S
●在 P(a3)节点后插入 S 节点
(1)S-next = P->next;
(2)P->next = S;
●删除 P(a3)前一个节点
(1)Q = P;
(2)P = L;
(3)while(P->next->next != Q) P = P->next; //找到 a1
(4)P->next = P->next->next; //让 a1 指针域指向 a3,从而删除 a2
●删除 P(a3)节点
(1)Q = P;
(2)P = L;
(3)while(P->next != Q) P = P->next; //找到 a2
(4)P->next = P->next->next; //让 a2 指针域指向 a4,从而删除 a3
●删除 P(a3)后一个节点
(1)P->next = P->next->next; //让 a3 指针域指向 a5,从而删除 a4
◎双链表
▲每个节点有前驱指针、数据域、后继指针 prior data next
双循环链表
头 a1 a2 a3 a4
●在 P(a2)节点前插入 S 节点
▲技巧:先让 S->prior 和 S->next 与链表建立关系
注:步骤(4)必须在步骤(3)后面
(1)S->next = P; //先让 S->next 指向 a2
(2)S->prior = P->prior; //S->prior 指向 a1
(3)P->prior->next = S; //再把 a1->next 指向 S
(4)P->prior = S; // a2->prior 指向 S
●在 P(a2)节点后插入 S 节点
注:步骤(4)必须在步骤(3)后面