[剑指offer]合并两个排序的链表
来源:互联网 发布:数控车床编程代码讲解 编辑:程序博客网 时间:2024/06/05 11:57
分析:其实就是mergesort里面的merge,不过换成链表了。这里考虑非递归和递归两种方法
1、非递归
如果某一个链表为空,直接返回另一个链表;
如果当前结果链表为空,则将两个链表指针对应比较小的那个直接赋值给结果链表;
如果当前结果老板不为空,则将当前指针的next指向两个链表指针对应比较小的那个;
最后一个链表遍历结束了,直接把另一个链表的当前指针加到结果链表后面。
/*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; if(pHead2==NULL) return pHead1; ListNode* n,*ret=NULL; ListNode* p=pHead1; ListNode* q=pHead2; while(p!=NULL&&q!=NULL){ if(p->val<=q->val){ if(ret==NULL){ ret=n=p; }else{ n->next=p; n=n->next; } p=p->next; } else{ if(ret==NULL){ ret=n=q; }else{ n->next=q; n=n->next; } q=q->next; } } if(p!=NULL){ n->next=p; } if(q!=NULL){ n->next=q; } return ret; }};
2、非递归
/*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; if(pHead2==NULL) return pHead1; ListNode* ret=NULL; if(pHead1->val<=pHead2->val){ ret=pHead1; ret->next=Merge(pHead1->next,pHead2); } else{ ret=pHead2; ret->next=Merge(pHead1,pHead2->next); } return ret; }};
0 0
- 剑指offer 17-合并两个排序表的链表
- 剑指Offer之合并两个排序的链表
- 剑指offer:合并两个排序的链表
- 剑指offer:合并两个排序的链表
- 【剑指offer】Q17:合并两个排序的链表
- 剑指offer-17:合并两个排序的链表
- 剑指offer系列源码-合并两个排序的链表
- 剑指offer--合并两个排序的链表
- 剑指offer之合并两个排序的链表
- 剑指Offer之 - 合并两个排序的链表
- 剑指offer:合并两个排序的链表
- 剑指Offer-合并两个排序的链表
- 剑指offer:合并两个排序的链表 代码实现
- 《剑指Offer》面试题:合并两个排序的链表
- 合并两个排序的链表(剑指offer)
- 《剑指offer》合并两个排序的链表
- 剑指Offer系列---(19)合并两个排序的链表
- 剑指 offer:合并两个排序的链表
- Sublime Text 3安装与使用
- Scalaz(40)- Free :versioned up,再回顾
- JDK+MyEclipse+Tomcat配置
- IOS开源项目学习---oschina
- flume高并发优化——(1)load_balance
- [剑指offer]合并两个排序的链表
- UISearchDisplayController灰色遮罩偏移
- [转]CocoaPods的安装使用 及Ruby环境的配置
- Java泛型中E、T、K、V等的含义
- 大坑总结(一)
- IOS中延时执行的几种方式的比较和汇总
- Python爬虫-用迅雷下载电影
- java-jdk环境变量配置
- Java并行计算Fork/Join框架使用