C++实现两个有序链表合并(17)---《那些奇怪的算法》
来源:互联网 发布:药监局数据库 编辑:程序博客网 时间:2024/06/16 11:21
这种代码有点类似于归并排序的合并阶段,大家可以对应参考起来进行学习!
ListNode结构
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* root=NULL; ListNode* pre=NULL; while(pHead1&&pHead2){ if(root==NULL){ if(pHead1->val<=pHead2->val){ root=pre=pHead1; pHead1=pHead1->next; }else{ root=pre=pHead2; pHead2=pHead2->next; } }else{ ListNode* cur=NULL; if(pHead1->val<=pHead2->val){ cur=pHead1; pHead1=pHead1->next; }else{ cur=pHead2; pHead2=pHead2->next; } pre->next=cur; pre=cur; } } if(pHead1){ pre->next=pHead1; } if(pHead2){ pre->next=pHead2; } return root; } };
递归版本:
class Solution {public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { if(!pHead1) return pHead2; if(!pHead2) return pHead1; ListNode *node; if(pHead1->val<=pHead2->val){ node=new ListNode(pHead1->val); node->next=Merge(pHead1->next,pHead2); }else{ node=new ListNode(pHead2->val); node->next=Merge(pHead1,pHead2->next); } return node; }};
阅读全文
0 0
- C++实现两个有序链表合并(17)---《那些奇怪的算法》
- C++之实现两个链表合并(迭代和递归版本)(19)---《那些奇怪的算法》
- 合并两个有序链表的算法
- 算法:两个有序链表的合并
- 实现两个有序链表的合并
- 实现两个有序链表的合并
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- PAT 2-11 两个有序链表序列的合并(C语言实现)
- 有序的合并两个有序链表
- 两个有序链表合并算法
- 算法题:合并两个有序的链表
- 算法题:合并两个有序的链表
- 算法学习----合并两个有序的链表
- 合并两个有序链表 (C++)
- 【C】两个有序链表序列的合并
- 合并两个有序链表,合并后依然有序(C语言)
- 数据结构与算法(二)合并两个有序链表
- 递归实现合并两个有序链表
- 单例模式在数据库中的应用
- hello java
- 【乱搞】51Nod 1622 集合对
- iOS开发-关于allocWithZone/copyWithZone/NSZone
- 如何实现一个可以用 await 异步等待的 Awaiter
- C++实现两个有序链表合并(17)---《那些奇怪的算法》
- poj 1753 枚举+dfs
- AWT&Swing 各种组件关系
- Linux中利用NFS实现飞鸽传书
- SAP Creating Packages
- 消息总线能否实现消息必达?
- Linux信号机制
- 【NOIP考前题目回顾】Luogu P1005
- KMP算法