/**
* @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; //返回值小的头,以便最开始能从最小的开始遍历
}
}
//合并两个有序链表
最新推荐文章于 2024-07-24 23:21:08 发布