合并两个排序的链表

该博客介绍了如何合并两个已排序的链表,通过定义指针并比较节点值来保持新链表的有序性。文章提供了一种解决思路,并给出了具体的步骤,包括何时移动指针、何时改变链表节点等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

剑指 Offer 25–合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

示例1:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

思路

  • 1.链表要先定义2个指针;
  • 2.dum指针是不能移动的;
     cur指针是要移动的,根据具体情况进行移动的;
  • 3.跳出循环的条件:l1或者l2为空时候;
  • 4.若(l1.val>l2.val),旧cur的下一个节点变为l2并将他作为现在的新节点;
      由于l2没了一个点,那么现在的l2变为l2的下一个节点开始;
      若(l1.val<l2.val),思路和上述情况一样。
  • 5.当l1或者l2为空时候跳出循环,并进行空的判断讨论;
  • 6.由于dum一开始初始化定义了0节点,所以返回的是dum.next。
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        //链表要先定义2个指针。
        ListNode dum = new ListNode(0);  //0的作用是进行初始化 //dum指针是不能移动的
        ListNode cur=dum;   //cur指针是要移动的,根据具体情况进行移动的
        while(l1!=null && l2!=null){ //跳出循环的条件
            if(l1.val>l2.val){
                cur.next=l2; //旧cur的下一个节点变为l2
                cur=cur.next;//并将他作为现在的新节点
                l2=l2.next;//l2没了一个点,那么现在的l2变为l2的下一个节点开始
            }else{
                cur.next=l1; //旧cur的下一个节点变为l1
                cur=cur.next;//并将他作为现在的新节点
                l1=l1.next;
            }
        }
        if(l1==null){
            cur.next=l2;
        }
        else{
            cur.next=l1;
        }
        return dum.next;  //返回的是不动的指针的下一个节点开始,因为一开始的0是初始化用的。
    }
}

【小结】

  • 链表题目一般要先定义指针并将它赋值好。

  • 新建节点的方法: ListNode dum = new ListNode(0) //0的作用是进行初始化

返回时候要返回这个 :return dum.next;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值