链表合并
来源:互联网 发布:怎样建立手机淘宝网店 编辑:程序博客网 时间:2024/06/04 23:19
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
题目链接:牛客网
模拟归并排序的合并的过程~
可以用迭代,也可以用递归,递归的写法十分整洁易读!!!
// 递归版本/*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* head; if (pHead1->val <= pHead2->val) { head = pHead1; head->next = Merge(pHead1->next, pHead2); } else { head = pHead2; head->next = Merge(pHead1, pHead2->next); } return head; }};
// 迭代版本/*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* now = NULL; if (pHead1->val <= pHead2->val) { now = pHead1; pHead1 = pHead1->next; } else { now = pHead2; pHead2 = pHead2->next; } ListNode* head = now; // 模仿归并排序的合并操作 while (pHead1 != NULL || pHead2 != NULL) { if (pHead1 == NULL) { MergeHelper(now, pHead2); continue; } if (pHead2 == NULL) { MergeHelper(now, pHead1); continue; } if (pHead1->val <= pHead2->val) MergeHelper(now, pHead1); else MergeHelper(now, pHead2); } return head; } void MergeHelper(ListNode*& master, ListNode*& guest) { master->next = guest; master = master->next; guest = guest->next; }};
0 0
- 有序链表合并&有序数组合并
- 有序链表合并
- C++合并链表
- 合并链表操作
- 合并两个链表
- 合并有序链表
- 链表的合并
- 合并链表
- 链表合并算法
- 合并有序链表
- 合并有序链表
- 合并有序链表
- 有序链表合并
- 链表合并
- 合并有序链表
- 合并链表
- 链表合并算法
- 合并有序链表
- 技术领域常见名词介绍
- “Enterprise Architect”和数据库的不解之缘
- Android自定义控件
- mysql去重复数据一点总结
- 特征值法解常系数线性微分方程解法总结
- 链表合并
- POJ_1007
- HTML标签基础
- Python 练习实例3
- 20616蓝桥杯第一题 水题
- dubbo例子
- Android Studio常用插件
- UVa 11988 Broken Keyboard (a.k.a. Beiju Text)
- n皇后问题