剑指 Offer 25. 合并两个排序的链表——最快的解法

原题链接

题目描述

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

示例1

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

限制

0 <= 链表长度 <= 1000


解法

思路
  1. 建立一个假的头结点和当前结点curr指向假头结点
  2. 同时遍历两条链表,将较小的结点添加到当前结点的后面
  3. 有一条链表遍历完后,将另一条链表剩余的结点添加到curr结点后面,返回头结点的next
代码
/* 合并两个链表 */
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    // 安排一个头结点
    ListNode preHead = new ListNode(0);
    // curr表示当前结点
    ListNode curr = preHead, p1 = l1, p2 = l2;
    while (p1 != null && p2 != null){
        if(p1.val <= p2.val){
            curr.next = p1;
            p1 = p1.next;
        }else {
            curr.next = p2;
            p2 = p2.next;
        }
        curr = curr.next;
    }
    // 较长的链表剩余部分得继续跟在后面
    curr.next = p1 == null ? p2 : p1;
    return preHead.next;
}
提交结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值