2.11.4 对单向链表的删除操作
要删除链表中第i个节点的基本算法如下:
(1)定位第i-1个节点。指针q 指向第i-1个节点,指针p指向被删除的节点。
(2)摘链。q->link = p->link。
(3)释放p节点。free(p)。
具体操作过程如图2.14 所示。如图2.15所示是删除第i个节点后链表的状态。
|
| (点击查看大图)图2.14 删除第i个节点的过程 |
|
| (点击查看大图)图2.15 删除第i个节点后链表的状态 |
根据上述算法的基本思想,可以写出删除链表中第i个节点的程序如下:
- delete_node(NODE *head, int i)
- {
- NODE *q, *p;
- int n;
- for(n=0,q=head;n<i-1&&q->link!=NULL;++n)
- qq = q->link; /*(1)定位第i-1 个节点*/
- if(i<0&&q->link!=NULL)
- {
- p = q->link; /*p指向被删除的第i 个节点*/
- q->link = p->link; /*(2)摘链*/
- free(p); /*(3)释放p节点*/
- }
- }