剑指offer--17.合并两个排序的链表
2016-07-14 17:50
288 查看
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
递归思路
非递归思路
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };
递归思路
class Solution { public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { //递归退出条件 if(pHead1==NULL) return pHead2; else if(pHead2==NULL) return pHead1; ListNode* pRes=NULL; if(pHead1->val<=pHead2->val) { pRes=pHead1; pRes->next=Merge(pHead1->next,pHead2); } else { pRes=pHead2; pRes->next=Merge(pHead1,pHead2->next); } return pRes; } };
非递归思路
class Solution { public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { if(pHead1==NULL) return pHead2; else if(pHead2==NULL) return pHead1; //pRes返回链表的头结点 ListNode* pRes=NULL; //pLast返回链表的尾节点 ListNode* pLast=NULL; if(pHead1->val<=pHead2->val) { pRes=pHead1; pHead1=pHead1->next; } else { pRes=pHead2; pHead2=pHead2->next; } pLast=pRes; while(pHead1!=NULL&&pHead2!=NULL) { if(pHead1->val<=pHead2->val) { pLast->next=pHead1; pLast=pLast->next; pHead1=pHead1->next; } else { pLast->next=pHead2; pLast=pLast->next; pHead2=pHead2->next; } } if(pHead2==NULL) pLast->next=pHead1; else if(pHead1==NULL) pLast->next=pHead2; return pRes; } };
相关文章推荐
- Javascript Array和String的互转换
- web前端知识汇总61-80
- jquery发送Ajax(POST方法)
- javascript判断机器是否联网的2种方法
- js 快速 +冒泡+去重
- 解决input的file类型各浏览器的样式兼容
- html 实体
- js获取url参数
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(三):两个Viewmodel搞定增删改查
- html 文字竖排效果
- Javascript 原型、原型链、prototype以及__proto__详解
- CSS3详解:background
- 利用html5 canvas实现纯前端上传图片的裁剪
- js图片自动轮播代码分享(js图片轮播)
- 面试总结篇之Javascript(三)
- T-SQL用法(游标和Fetch)
- javascript设计模式学习之十四——中介者模式
- canvas图片数字计时
- JS学习笔记(1)
- [译]你应该知道的4种JavaScript设计模式