美文网首页
合并两个排序的链表

合并两个排序的链表

作者: su945 | 来源:发表于2020-05-02 15:08 被阅读0次

题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

问题分析

  • 递归版
  • 非递归版

解题思路1

  • 递归版
/*
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 == nullptr)
        {
            return pHead2;
        }
        if (pHead2 == nullptr)
        {
            return pHead1;
        }
        ListNode* mergeList = nullptr;
        if (pHead1->val < pHead2->val)
        {
            mergeList = pHead1;
            mergeList->next = Merge(pHead1->next,pHead2);
        }
        else
        {
            mergeList = pHead2;
            mergeList->next = Merge(pHead1, pHead2->next);
        }
        return mergeList;

    }
};

解题思路2

  • 非递归版
class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        //边界判断
        if(pHead1 == NULL)
            return pHead2;
        else if(pHead2 == NULL)
            return pHead1;
        //创建头尾指针
        ListNode* pMergeTail = new ListNode(0);
        ListNode* pMergeHead = new ListNode(0);
        //尾指针赋值
        pMergeTail = pMergeHead;
        //循环开始
        while(pHead1 && pHead2){
            if(pHead1->val < pHead2->val){
                pMergeTail->next = pHead1;
                pHead1 = pHead1->next;
            }
            else{
                pMergeTail->next = pHead2;
                pHead2 = pHead2->next;
                }
            pMergeTail = pMergeTail->next;
        }
        //剩下的链表部分直接添加
        pMergeTail->next = pHead1 ? pHead1 : pHead2;
        return pMergeHead->next;
    }
};

相关文章

  • 面试题25. 合并两个排序的链表

    合并两个排序的链表 题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例: ...

  • LeetCode题解之合并两个排序的链表

    合并两个排序的链表 题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1:...

  • 25:合并两个排序的链表

    题目25:合并两个排序的链表 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的 举例说...

  • LeetCode 每日一题 [56] 合并两个排序的链表

    LeetCode 合并两个排序的链表 [简单] 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增...

  • leecode刷题(27)-- 合并k个排序链表

    leecode刷题(27)-- 合并k个排序链表 合并k个排序链表 合并 k 个排序链表,返回合并后的排序链表。请...

  • 剑指offer之合并两个排序的列表

    合并两个排序的列表 欢迎关注作者简书csdn传送门 题目   输入两个递增排序的链表,合并这两个链表并使新链表中的...

  • 2018-12-26

    问题列表 合并两个有序链表 合并K个排序链表 合并区间 插入区间 问题与反馈 总结与收获 多个有序链表的合并,类似...

  • 面试题25:合并两个排序的链表

    题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点依然是排序的

  • [LeetCode OJ]- Merge Two Sorted

    题目要求:合并两个单向已排序的链表l1和l2,返回新的链表。 思路:该问题跟合并两个已排序的数组很像,合并两个已排...

  • 链表

    1 合并两个链表 2 链表判环 并返回入环节点的值 3 两个无环单链表是否相交 4 合并两个有序链表 5 链表排序

网友评论

      本文标题:合并两个排序的链表

      本文链接:https://www.haomeiwen.com/subject/uzukghtx.html