何大土  

题目

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

示例:

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

代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode dhead = new ListNode(-1);
        ListNode r = dhead;
        while(l1!=null&&l2!=null){
            if(l1.val<=l2.val){
                r.next = l1;
                r = l1;
                l1 = l1.next;
            }else{
                r.next = l2;
                r = l2;
                l2 = l2.next;
            }
        }
        if(l1!=null)
            r.next = l1;
        if(l2!=null)
            r.next = l2;

        return dhead.next;
    }
}

时间复杂度:O(n + m)O(n+m) ,其中 nn 和 mm 分别为两个链表的长度。因为每次循环迭代中,l1 和 l2 只有一个元素会被放进合并链表中, 因此 while 循环的次数不会超过两个链表的长度之和。所有其他操作的时间复杂度都是常数级别的,因此总的时间复杂度为 O(n+m)O(n+m)。

空间复杂度:O(1)O(1) 。我们只需要常数的空间存放若干变量。

 

posted on 2020-05-01 09:52  何大土  阅读(197)  评论(0编辑  收藏  举报