Merge Two Sorted Lists
来源:互联网 发布:大数据分析师就业领域 编辑:程序博客网 时间:2024/06/17 00:07
Leetcode 21. Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
合并两个有序单链表
思路跟合并两个有序数组一样
/**
* Definition for singly-linked list.* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode *head = new ListNode(0);
ListNode *tail = head;
while(l1 && l2)
{
if (l1->val < l2->val)
{
tail->next = l1;
l1 = l1->next;
}
else
{
tail->next = l2;
l2 = l2->next;
}
tail = tail->next;
}
while (l1)
{
tail->next = l1;
l1 = l1->next;
tail = tail->next;
}
while (l2)
{
tail->next = l2;
l2 = l2->next;
tail = tail->next;
}
return head->next;
}
};
AC后看其他人的思路,diss第一名用的递归....orz
确实...这可以划分为更小的问题,但若不告诉我可用递归,我也想不到。
思路如下,现在写递归,更喜欢从最小的问题考虑起,对于该问题就是两个结点的合并。专注于最小问题,可以较好的写出代码,而且只要保证问题变小的方向是对的,那么递归一般没问题
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (l1 == NULL)
return l2;
if (l2 == NULL)
return l1;
if (l1->val < l2->val)
{
l1->next = mergeTwoLists(l1->next, l2);
return l1;
}
else
{
l2->next = mergeTwoLists(l1, l2->next);
return l2;
}
}
};
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- BZOJ 1009 KMP+矩阵快速幂优化DP
- js函数漫谈
- C++和Java动态开辟二维数组
- POJ 2593-最大2个子序列和
- java流程控制与数组
- Merge Two Sorted Lists
- shareSDK如何只分享图片
- Ubuntu安装微信教程 超简单的[5P]
- 【剑指offer】面试题6:重建二叉树
- Java网页数据采集器[中篇-数据存储]
- udt的java实现
- 【数据结构和算法】Day 12
- CentOS 7 磁盘分区
- spring管理事务的配置文件