栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

链表---合并两个有序链表

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

链表---合并两个有序链表

记录链表的题

力扣题目链接 : https://leetcode.cn/problems/merge-two-sorted-lists/

题目: 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例1:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例2:

输入:l1 = [], l2 = []
输出:[]

示例3:

输入:l1 = [], l2 = [0]
输出:[0]

提示:

  • 两个链表的节点数目范围是 [0, 50]
  • -100 <= Node.val <= 100
  • l1 和 l2 均按 非递减顺序 排列

思路:

两个有序的链表合并其实思路很简单,我们比较两个链表的值,如果第一个链表节点的值大于第二个链表节点的的值,那么就将第一个链表的指针指向第二个链表的节点,相反,则第一个链表向下跳一个即可。

  • 我们首先要判断链表是否是null,判断边界条件很重要
 if(head1 == null || head2 == null){
        return head1 == null ? head2 : head1;   // 返回其中一个链表
   }
  • 我们是不是还得知道那个链表做头啊,那个链表的头部的值最小,那个就做小头
 ListNode head = head1.val <= head2.val ? head1 : head2;
  • 然后我们需要定义三个节点,分别用来指向小头的下一个节点,和指向大头(第二个链表值比小头的大)的节点,以及需要一个指向和小头的节点。
 ListNode cur1 = head.next; // 指向小头的下一个节点
 ListNode cur2 = head == head1 ? head2 : head1; // 直接指向大头,因为不知道那个是大头,所以需要三目运算符判断一下
 ListNode pre = head;  // 指向小头的节点
  • 最后while循环链表,判断大小,并修改指针
完整代码如下:
class Solution {
    public ListNode mergeTwoLists(ListNode head1, ListNode head2) {
        if(head1 == null || head2 == null){
            return head1 == null ? head2 : head1;
        }

        ListNode head = head1.val <= head2.val ? head1 : head2; // 这个就是最终要返回的小头结点
        ListNode cur1 = head.next; // 指向小头的下一个节点
        ListNode cur2 = head == head1 ? head2 : head1; // 直接指向大头
        ListNode pre = head;
        // 当链表没有循环到空的时候,继续
        while(cur1 != null && cur2 != null){
        	// 如果小头的下一个节点的值(cur1上面已经定义过了,是小头的下一个节点)大于等于大头的值时候。
            if(cur1.val >= cur2.val){ 
                pre.next = cur2; // 修改pre指针指向cur2
                cur2 = cur2.next; // cur2随之向后移动一下。
            }else{
                pre.next = cur1; // 否则,pre指向cur1
                cur1 = cur1.next; // cur1随之向后移动一下。
            }
            pre = pre.next; // 跳它自己的下一个位置,pre节点跳到下一个位置。
        }
        pre.next = cur1 != null ? cur1 : cur2; // 最后,跳出循坏后,pre肯定指向的是null值,所以,我们只需要让她指向下一个不是空链表的链表。
        return head;
    }
}
OK!打完收工!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/949645.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号