剑指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;
}
可以用递归和循环两种方法实现。
//剑指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; }
相关文章推荐
- 提高前端性能的黄金法则
- WEB前端:HTML+CSS+JavaScript
- Angularjs link和compile使用区别
- jQuery源码分析之jQuery.fn.each与jQuery.each用法
- 走进ReactiveCocoa的世界
- jsp页面上传csv文件
- Web前端工程师成长之路——知识汇总
- css3+js实现整屏滑动
- JS字符对比
- js返回数据类型
- CSS选择器
- CSS3中Animation动画属性用法详解
- JavaScript强化教程——jQuery动画
- AngularJS入门教程:导言和准备
- JavaScript强化教程——jQuery动画
- 原生javascript实现的分页插件pagenav
- 【分享】WeX5的正确打开方式(5)——绑定机制
- [Effective JavaScript 笔记]第55条:接收关键字参数的选项对象
- 我的第一个js程序
- ReactiveCocoa自述:工作原理和应用