链表习题(7)-将两个递增单链表合并成一个递减单链表

时间:2019-10-10 20:10:07   收藏:0   阅读:159
 1 /*将两个递增单链表合并成一个递减单链表*/
 2 /*
 3     算法思想:两个链表已经按元素值递增次序排序,将其合并时,均从第一个结点起进行比较,将较小的
 4     结点链入链表中,同时后移工作指针。由于结果链表是递减的,故使用头插法建立新链表。比较结束后,
 5     可能会有一个链表非空,此时用头插法将剩下的结点依次插入新链表中即可。
 6 */
 7 void Union_List(LinkList& La,LinkList& Lb)
 8 {
 9     LNode *r, *pa = La->next, *pb = Lb->next;    //pa,pb分别是La,Lb的工作指针
10     La->next = NULL;        //将La作为结果链表的头指针
11     while (pa&&pb)
12     {
13         if (pa->data <= pb->data)
14         {
15             r = pa->next;        //r暂存pa的后继结点指针
16             pa->next = La->next;        //头插法插入pa所指结点
17             La->next = pa;
18             pa = r;
19         }
20         else
21         {
22             r = pb->next;
23             pb->next = La->next;
24             La->next = pb;
25             pb = r;
26         }
27         while (pa)        //处理剩下的结点
28         {
29             r = pa->next;        
30             pa->next = La->next;    
31             La->next = pa;
32             pa = r;
33         }
34         while (pb)        
35         {
36             r = pb->next;
37             pb->next = La->next;
38             La->next = pb;
39             pb = r;
40         }
41     }
42     free(Lb);
43 }

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!