首页 > 代码库 > 无表头单链表的总结----两个链表合并
无表头单链表的总结----两个链表合并
#include"head.h" struct Student* insert(struct Student*ahead, struct Student*bhead) { struct Student *pa1, *pa2, *pb1, *pb2; pa1 = pa2 = ahead; pb1 = pb2 = bhead; if ((ahead != NULL)&&(bhead != NULL)) { do { while ((pb1->num > pa1->num) && (pa1->next != NULL)) //先找到要插入的位置 { pa2 = pa1; pa1 = pa1->next; //pa1在前,pa2在后 } if (pb1->num <= pa1->num) { if (pa1 == ahead) ahead = pb1; //pb1往上要么把插入的链表链接到头指针 else pa2->next = pb1;//pb1往上要么把插入的链表链接到pa2->nex pb1 = pb1->next; //先把pb1往下一个要插的节点移,释放pb1 pb2->next = pa1;//往下把插入的节点连接到原列表pa1处 pa2 = pb2;//把pa2指向刚插入的链表pb2,与pa1挨着,回归原始状态 pb2 = pb1;//再把pb2移到pb1处,回归原始状态 } } while ((pa1->next != NULL) || (pb1 != NULL&&pa1 == NULL)); //循环条件,还没有指向原链表最后一个元素或者pb还有元素且原列表不空 if ((pb1 != NULL) && (pb1->num > pa1->num) && (pa1->next == NULL)) pa1->next = pb1; //原列表已经插到最后了 } else if ((ahead == NULL) && (bhead != NULL)) ahead = bhead; return ahead; } //分四种情况,{alist=null,blist=null},{ alist!=null,blist=null },{ //alist=null,blist=!null }, //{ alist=!null,blist=!null },第四种最复杂。
无表头单链表的总结----两个链表合并
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。