无表头单链表的总结----删除节点

Posted 新爱代

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无表头单链表的总结----删除节点相关的知识,希望对你有一定的参考价值。

 1 #include "head.h"
 2 struct Student*del(struct Student*head,char num[N])
 3 {
 4     struct Student*p1, *p2;
 5     if (head == NULL)                  //若链表为空,则无需处理
 6     {
 7         printf("\nlist NULL!\n");
 8         return (head);
 9     }
10     p2 = p1 = head;
11     while (strcmp(num, p1->nun) != 0 && p1->next != NULL)//重要!循环终止的条件是找到
12 //了要删除的节点或者搜寻到了最后一个节点
13     {
14         p2 = p1;         //循环中若,没找到,则指针往后移一位
15         p1 = p1->next;
16     }
17     if (strcmp(num, p1->nun) == 0)   //循环结束分两种情况,1是找到,找到也分两种情况
18     {
19         if (p1 == head) head = p1->next;   //第一个节点就是我们要找到
20         else    p2->next = p1->next;         //除第一节点外的处理方式(包括末尾节点)    
21         printf("delete:%s\n", p1->nun);
22         n--;       //删除一个就要成员数减一个;
23     }
24     else printf("%s not been found!\n", num);     //2,没找到怎完事
25     return head;
26 }

 

以上是关于无表头单链表的总结----删除节点的主要内容,如果未能解决你的问题,请参考以下文章

无表头单链表的总结----增加节点(原链表为有序的链表)

无表头单链表的总结----无限删除和无限插入(在主函数里实现)

无表头单链表的总结----输出链表

无表头单链表的总结----动态建立链表

无表头单链表的总结----两个链表合并

无表头单链表的总结----如何将已经初始化的结构体数组加入链表关系