牛客经典链表题—(NC33)合并有序链表

满难度系数 * * * * *,此题难度系数 * * *
满考频热度 * * * * *,此题热度 * * * * *

1. 题目描述

在这里插入图片描述

2. 题目链接

  1. 牛客题目链接合并有序链表

3. 题目剖析

  1. 首先前提是两个有序链表l1,l2。将他们合并为一个有序链表
  2. 利用归并排序的思想,建立一个哨兵结点,每次取两个链表中较小的进行合并。
  3. 注意问题是两个链表长度可能会不一样长,要考虑处理。
  4. 这个题除了哨兵结点之外不要开辟另外的空间,将链表l1,l2从新进行有序链接。
  5. 哨兵结点的好处是如果两个链表都为空则不需要判断,最后返回NewHead->next也为空

3.1剖析图示

在这里插入图片描述

3.2 图示详解

  1. 先定义一个哨兵结点,指向l1,l2里面最小的。
  2. 然后再找次小的进行链接。
  3. 如此迭代,直到两个链表都遍历完毕。

4. 解题代码

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

class Solution {
    
    
public:
    /**
     * 
     * @param l1 ListNode类 
     * @param l2 ListNode类 
     * @return ListNode类
     */
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
    
    
        ListNode *NewHead = new ListNode(0);//注释1
        ListNode *Node = NewHead;
        //注释2
        if(l1 == nullptr) 
        {
    
    
            return l2;
        }
        if(l2 == nullptr)
        {
    
    
            return l1;
        }
        //注释3
        while(l1 && l2)
        {
    
    
            if(l1->val < l2 ->val)
            {
    
    
                Node -> next = l1;
                Node = Node ->next;
                l1 = l1 -> next;
            }
            else
            {
    
    
                Node -> next = l2;
                Node = Node -> next;
                l2 = l2 ->next;
            }
        }
        //注释4
        while(l1)
        {
    
    
            Node -> next = l1;
            Node = Node -> next;
            l1 = l1 -> next;
        }
        while(l2)
        {
    
    
            Node -> next = l2;
            Node = Node -> next;
            l2 = l2 ->next;
        }
        //注释5
        return NewHead->next;
    }
};

5. 代码注释详解

  1. 注释1:先建立一个哨兵结点,让最小的直接链接在后面。
  2. 注释2:如果两个有序链表中有一个为nullptr则直接返回另外一个。
  3. 注释3:两个链表中有一个为空时则结束循环,循环内部每次找次小的结点进行链接。利用的是归并排序的思想。
  4. 注释4:如果两个链表有一个为空,另一个还没有为nullptr则直接将剩下的链接在后面。
  5. 注释5:因为设立了哨兵结点,所以返回的是哨兵结点的下一个。

合并有序链表算法复杂度为:

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

1.如有错误或者没能理解的地方,请及时评论或者私信,及时修改更新
2.会持续更新相关链表高频题目,分类专栏—数据结构

猜你喜欢

转载自blog.csdn.net/weixin_45313447/article/details/115414640