写点什么

【LeetCode】合并两个有序链表 Java 题解

用户头像
HQ数字卡
关注
发布于: 刚刚

题目描述

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


示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = []输出:[]
示例 3:
输入:l1 = [], l2 = [0]输出:[0]

来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-two-sorted-lists著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

思路分析

  • 今天的算法每日一题,是合并有序链表题目,也是非常常见的一类入门题目。题目要求将两个升序链表合并为一个新的 升序 链表并返回。

  • 根据题目要求,我们可以采用递归的算法思想解决问题,链表的递归终止条件是 node == null, 然后分别比较链表值的大小进行排序。

  • 这个题目也可以采用迭代的算法解决,定义一个 dummy 节点,辅助操作链表。实现代码如下:

通过代码

  • 递归算法


/** * 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 l1, ListNode l2) {        if (l1 == null) {            return l2;        } else if (l2 == null) {            return l1;        } else if (l1.val < l2.val) {            l1.next = mergeTwoLists(l1.next, l2);            return l1;        } else {            l2.next = mergeTwoLists(l1, l2.next);            return 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 l1, ListNode l2) {        ListNode dummy = new ListNode(0);        ListNode current = dummy;        while (l1 != null && l2 != null) {            if (l1.val < l2.val) {                current.next = l1;                current = current.next;                l1 = l1.next;            } else {                current.next = l2;                current = current.next;                l2 = l2.next;            }        }
if (l1 == null) { current.next = l2; } else { current.next = l1; }
return dummy.next; }}
复制代码

总结

  • 上述代码的时间复杂度是 O(n),空间复杂度是 O(n)

  • 坚持算法每日一题,加油!

发布于: 刚刚阅读数: 2
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】合并两个有序链表Java题解