LeetCode 21. Merge Two Sorted Lists(链表)
- By Scarb
- Scarb’s Blog
Tags:
- Linked List
问题描述
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.
解题思路
题意是给两个排序好的链表,要求合并为一个排序好的链表。
创建一个结果链表用于储存合并的结果。
用两个指针分别指向两个链表,比较指针所指值的大小,小的赋给结果指针并且该链表指针后移一位。
最后当某个链表指针为空时直接将另一个链表加到结果链表后面,并返回结果链表。
参考代码
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x): val(x), next(NULL) {}
};
class Solution
{
public:
ListNode* mergeTwoLists(ListNode *l1, ListNode *l2)
{
ListNode dummy(INT_MIN);
ListNode *tail = &dummy;
while (l1 && l2)
{
if (l1->val < l2->val)
{
tail->next = l1;
l1 = l1->next;
}
else
{
tail->next = l2;
l2 = l2->next;
}
tail = tail->next;
}
tail->next = l1 ? l1 : l2;
return dummy.next;
}
};
int main()
{
Solution sl;
ListNode *l1 = new ListNode(1);
ListNode *l2 = new ListNode(3);
ListNode *l3 = new ListNode(5);
ListNode *l4 = new ListNode(2);
ListNode *l5 = new ListNode(4);
ListNode *l6 = new ListNode(6);
l1->next = l2;
l2->next = l3;
l4->next = l5;
l5->next = l6;
ListNode *temp = sl.mergeTwoLists(l1, l4);
while (temp != NULL)
{
cout << temp->val << " ";
temp = temp->next;
}
system("pause");
return 0;
}