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

Posted 新爱代

tags:

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

 1 #include"head.h"
 2 struct Student* insert(struct Student*head, struct Student*addinfo)
 3 {
 4     struct Student *p0, *p1, *p2;  //开辟三个结构体指针
 5     p2=p1 = head;   //头指针赋给p1,p2
 6     p0 = addinfo;  //把 增加信息的指针赋给p0,习惯不用原来指针
 7     if (head == NULL)
 8     {
 9         head = p0  //如果原来链表是空的,直接把新节点赋给头指针
10         p0 ->next = NULL;  //链表结束标志
11     }
12     else
13     {
14         while ((strcmp(p0->nun, p1->nun) > 0) && (p1->next != NULL))//循环终止条件是
15                                  // p0->nun<p1->nun,或者搜到链表最后一个元素了
16         {
17             p2 = p1;
18             p1 = p1->next;    //循环中若,没找到,则指针往后移一位
19         }
20         if ((strcmp(p0->nun, p1->nun) <=0))       //找到插入位置,介于p2~p1之间
21         {
22             if (p1 == head) head =p0;    //若插在第一位,把p0赋给头指针
23             else p2->next = p0;//若是中间,则把p0赋给p2->next
24                 p0->next = p1;        //两种情况后,把    后指针p1赋给p0->next,链接起来
25         }
26         else      //没找到,说明插入的序号最大,只需插在原来链表最后就行
27         {
28             p1->next =p0;//此时p1移到指向最后一个元素
29             p0->next = NULL;
30         }
31     }
32     n++;
33     return head;
34 }

 

以上是关于无表头单链表的总结----增加节点(原链表为有序的链表)的主要内容,如果未能解决你的问题,请参考以下文章

无表头单链表的总结----从链表中删除某一个年纪的的节点

算法总结之 合并两个有序的单链表

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

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

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

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