24.合并两个排序的链表

输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。

数据范围:

链表长度 [0,500]。

样例:

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

代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode merge(ListNode l1, ListNode l2) {
        //创建虚拟头节点
        ListNode head = new ListNode(-1);
        //pre指针用于构建新链表,初始指向虚拟头节点
        ListNode pre = head;
        //同时遍历两个链表,自导其中一个遍历完
        while(l1!=null&&l2!=null){
            //比较当前两个节点的值
            if(l1.val<l2.val){
                //如果l1的值比较小,将l1接在新链表后面
                pre.next = l1;
                //l1指针后移
                l1 = l1.next;
            }else{
                //如果l2的值较小或相等,将l2接在新链表后面
                pre.next = l2;
                //l2指针后移
                l2 = l2.next;
            }
            //新链表的指针后移
            pre = pre.next;
        }
        //处理剩余的l1链表节点
        while(l1!=null){
            pre.next = l1;
            pre = l1;
            l1 = l1.next;
        }
        //处理剩余的l2链表节点
        while(l2!=null){
            pre.next = l2;
            pre = l2;
            l2 = l2.next;
        }
        //返回合并后的链表头节点(跳过虚拟头节点)
        return head.next;
    }
}
posted @ 2025-05-15 10:29  回忆、少年  阅读(4)  评论(0)    收藏  举报