【问题描述】[简单]
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
【解答思路】
1. 非递归
时间复杂度:O(N) 空间复杂度:O(N)
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {//新建节点ListNode list = new ListNode(0);ListNode l =list;while(l1!= null && l2!= null){if(l1.val <= l2.val){l.next =l1 ;l1 = l1.next;l = l.next;}else {l.next = l2;l2 = l2.next;l =l.next;}}//某一条链表遍历完毕if(l1 == null) {l.next =l2;}else {l.next =l1;}return list.next;}
2.递归
递归就是程序内部维护了一个栈。这个题就是每次都把最小值压入栈,最后出栈的时候,将所有数连在一起就可以了。说白了,就是用一个栈维护了顺序。最后的连接,当然是小的连小的,所以l1 小,就连到 l1,l2 小就连到 l2,最后先返回的,就是最小的头结点
时间复杂度:O(N+M) 空间复杂度:O(1)
N M 分别为l1,l2两者的长度
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {if(l1 == null) {return l2;}if(l2 == null) {return l1;}if(l1.val < l2.val) {l1.next = mergeTwoLists(l1.next, l2);return l1;} else {l2.next = mergeTwoLists(l1, l2.next);return l2;}}作者:guanpengchn
图解链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/hua-jie-suan-fa-21-he-bing-liang-ge-you-xu-lian-bi/