//合并两个有序链表

/**
 * @author 真他喵的学不动咯
 * @create 2022-08-12--20:17
 */
public class Combine {   //合并两个有序链表
    //https://leetcode-cn.com/problems/merge-two-sorted-lists/?utm_source=LCUS&utm_medium=ip_redirect&utm_campaign=transfer2china
    //给定头节点head1\head2
    //13357
    //22337
    //122333357

    public static class ListNode{
        public int val;
        public ListNode next;
    }

    //合并两个链表
    public static ListNode mergeTwoList(ListNode head1,ListNode head2){
        if (head1==null||head2==null){
            return head1==null?head2:head1;   //返回不是null的那个头,因为有一个为null,那就不需要合并,直接返回非空的那个
            }
            ListNode head=head1.val<=head2.val? head1:head2;   //谁的值小,就返回谁的头
            ListNode cur1=head.next;  //head的下一个cur1   ,cur1指向小头
            ListNode cur2=head==head1? head2:head1; //cur2是另一个头,和cur1必然是不同的头,cur2指向大头
            ListNode pre=head;  //head是锁死的,所以必然不能动,重新找一个pre代替head继续指针变动
            while (cur1!=null&&cur2!=null){
                if (cur1.val<=cur2.val){
                    pre.next=cur1;  //谁的值小就穿谁
                    cur1=cur1.next;  //被穿的那个向下移动一格
                }else{
                    pre.next=cur2;
                    cur2=cur2.next;
                }
                pre=pre.next;  //把头指针(的替身)向下移,进行新一次循环
            }
            //走到这里说明有一个表变成了null
            pre.next=cur1!=null? cur1:cur2;  //pre指向不空的表,把不空的表直接遍历完
        return head;  //返回值小的头,以便最开始能从最小的开始遍历
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值