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.
题目翻译
将两个已排序的链表合并为一个新链表,新链表原链表的节点组成。
解题方案
标签: Linked List
思路:
- 有序链表合并在数据结构里几乎是例题了,正常思路就是逐步遍历两个链表,比较两个节点值的大小,把较大(较小)的节点值尾插到新链表的尾部(next),直到其中某一个链表或者两条链表同时结束。
- 如果某条链表为空或提前遍历结束,可将另一条链表的所有节点或剩余节点都接到结果链表上,可利用递归实现。
代码:
/**
* 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) {
if (l1 == NULL) return l2;
if (l2 == NULL) return l1;
if (l1->val > l2->val) {
ListNode *sol = l2;
sol->next = mergeTwoLists(l1, l2->next);
return sol;
} else {
ListNode *sol = l1;
sol->next = mergeTwoLists(l1->next, l2);
return sol;
}
}
};
参考链接:
作者:娄尘哲