您的位置:首页 > Web前端

剑指Offer——有序链表的合并

2016-07-04 15:27 316 查看
题目:将两个递增的单链表合并成一个递增的单链表

可以用递归和循环两种方法实现。

//剑指Offer:两个递增的单链表,合并成一个递增的单链表
#include <iostream>

using namespace std;
struct ListNode
{
int val;
ListNode *next;
};

//方法一:递归,另建一个新的链表,存储值
ListNode *Merge1(ListNode *phead1,ListNode *phead2)
{
//鲁棒性检查,防止程序访问到NULL指针,出现崩溃
if(phead1==NULL)
return phead2;
if(phead2==NULL)
return phead1;
ListNode *phead;

if(phead1->val>phead2->val)
{
phead=phead2;
phead->next=Merge1(phead1,phead2->next);
}
else
{
phead=phead1;
phead->next=Merge1(phead1->next,phead2);
}
return phead;
}
//方法二:循环法,将链表2插入到链表1中
ListNode *Merge2(ListNode *phead1,ListNode *phead2)
{
ListNode *p,*r,*q,*s;
p=phead1;  r=p->next;
q=phead2->next; s=q->next;//当链表2的节点插入后,保存后继节点。

while(r!=NULL&&q!=NULL)
{
if(r->val<=q->val)
{
p=r;
r=r->next;
}else
{
q->next=p->next;
p->next=q;//将q指向节点插到p

p=q;
q=s;
s=s->next;
}
}
if(r==NULL) p->next=q;
return p;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: