2.11.4 对单向链表的删除操作

2013-10-12 07:02:37 · 作者: · 浏览: 106

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个节点的程序如下:

  1. delete_node(NODE *head, int i)  
  2. {  
  3. NODE *q, *p;  
  4. int n;  
  5. for(n=0,q=head;n<i-1&&q->link!=NULL;++n)  
  6. qq = q->link; /*(1)定位第i-1 个节点*/  
  7. if(i<0&&q->link!=NULL)  
  8. {  
  9. p = q->link; /*p指向被删除的第i 个节点*/  
  10. q->link = p->link; /*(2)摘链*/  
  11. free(p); /*(3)释放p节点*/  
  12. }