26.合并两个有序链表

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

示例1:
image

输入: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 均按 非递减顺序 排列

代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        //定义一个头节点
        ListNode head = new ListNode(-1);
        //定义一个节点用于指向连接过程中的当前节点
        ListNode prev = head;
        //只要两条链表都不为空,就进行连接操作
        while(list1!=null&&list2!=null){
            //如果list1当前节点的值小于等于list2当前节点的值,则连向list1,list1节点往后移
            if(list1.val<=list2.val){
                prev.next = list1;
                list1 = list1.next;
            }else{
                //如果list1当前节点的值大于list2当前节点的值,则连向list2,list2节点往后移
                prev.next = list2;
                list2 = list2.next;
            }
            //prev节点往后移
            prev = prev.next;
        }
        //如果哪条链不为空,prev就指向哪条链以连接
        prev.next = list1 == null?list2:list1;
        //返回连接后链表的头节点
        return head.next;
    }
}
posted @ 2025-04-22 09:10  回忆、少年  阅读(15)  评论(0)    收藏  举报