两个已排序链表的合并

1 typedef struct Node{
2 int data;
3 struct Node* next;
4 }Node, *LinkList;
5 void Merge(LinkList la, LinkList lb, LinkList &lc)
6 {
7 // NULL检测
8 if(!la) {lc = pb; return;}
9 if(!lb) {lc = pa; return;}
10 Node* p;
11
12 // 确定最大值在la上, 还是lb上
13 if(la.data > lb.data) { lc = p = la; la = la->next; }
14 else { lc = p = lb; lb = lb->next; }
15
16 while(la &&lb)
17 {
18 if(la.data > lb.data)
19 {
20 p->next = la;
21 la = la->next;
22 }else if(la.data < lb.data)
23 {
24 p->next = lb;
25 lb = lb->next;
26 }else{ // la 与 lb中值相等的情况
27 p->next = la;
28 la = la->next;
29 Node* tmp = lb;
30 lb = lb->next;
31 free(tmp);
32 }
33 p = p->next;
34 }
35 // 剩余部分链表的挂接
36 p->next = (la ? la:lb);
37 }

FROM:

http://fz.okpinpai.net/nvzhuang/201103/2373044.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值