合并两个有序链表 | Java刷题打卡

309 阅读1分钟

本文正在参加「Java主题月 - Java 刷题打卡」,详情查看 活动链接

缘聚缘散缘如水,背负万丈尘寰,只为一句,等待下一次相逢。
文章首发于公众号 “蘑菇睡不着”,更多精彩内容欢迎关注

一、题目描述

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

示例 1:

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

提示:
0 <= 链表长度 <= 1000

二、思路分析:

  这道题的逻辑就是两个链表从头开始遍历,一个一个比较大小,把小的节点放到一个新的头节点上,以此类推。直接代码效果会更好点

三、AC代码

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        // 新的头节点
        ListNode dum = new ListNode(0), cur = dum;
        while(l1 != null && l2 != null) {
            // l1 小,讲节点放到头节点后, l1 向后移动
            if(l1.val < l2.val) {
                cur.next = l1;
                l1 = l1.next;
            } else {
                cur.next = l2;
                l2 = l2.next;
            }
            cur = cur.next;
        }
        // 最后看看那个链表还没有遍历完,直接整个接入到新链表后
        cur.next = l1 != null ? l1 : l2;
        return dum.next;
    }
}

时间复杂度:O(M+N) : M, N 分别为两个链表的长度,合并操作需遍历两链表。 空间复杂度:O(1)

四、总结

这个要注意下遍历之后可能会有没遍历完的链表。

如果觉得文章还不错就点个赞、关个注呗~