一、问题
如何删除链表中指定位置的结点?
二、解答
删除链表中指定的结点,就像是排好队的⼩朋友⼿牵着⼿,将其中⼀个⼩朋友从队伍中分出来,只需将这个⼩朋友的双⼿从两边松开。
删除结点有两种情况:
(1)被删除结点是头结点。这种情况使 head 指向第⼆个结点即可,即 head=p->next;
(2)被删除结点不是头结点,这种情况只需将被删结点的前⼀结点指向被删结点的后一结点可,例如:pq->next=ph->next;。
在删除了链表中的此结点后,需要将此结点所占的内存释放掉,以节省内存,⽅便其他变量的应⽤。 删除链表结点的过程如下:
(1)找到要删除的位置,与插⼊结点时查找位置相同。相应代码如下。
在遍历了结点并找到删除的位置后,判断p所指向的后继结点是否为 NULL,若后继结点为 NULL,则说明不存在这个想要删除的结点,程序直接退出。相应代码如下。
if(!p->nexi||i>i-1)
exit(1);
(2)找到要删除的结点的位置,需要执⾏删除结点操作和释放内存操作。相应代码如下。
r=p->next;
P->next=r->next;
free(p);
实现删除指定位置的链表结点的过程如下所示。
三、总结
在链表中删除结点,就是将结点从链表中分离出来,撤销原来的链接关系,⽽不是将结点从内存中抹掉。