LeetCode 21. Merge Two Sorted Lists(链表)

来源:互联网 发布:河北网络干部学院 编辑:程序博客网 时间:2024/05/29 18:39

LeetCode 21. Merge Two Sorted Lists(链表)

  • 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;}