美文网首页
LeetCode 链表 > 21. 合并两个有序链表

LeetCode 链表 > 21. 合并两个有序链表

作者: 成长和自由之路 | 来源:发表于2019-05-25 17:34 被阅读0次

    21. 合并两个有序链表

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

    示例:
    输入: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) {
            
            if (l1 == null) {
                return l2;
            }
            if (l2 == null) {
                return l1;
            }
            
            ListNode result = l1;
            ListNode l1Loop = l1;
            ListNode l2Loop = l2;
    
            if (l1Loop.val > l2Loop.val) {
                l1 = result = l2Loop;
                l2Loop = l2Loop.next;
            } else {
                l1Loop = l1Loop.next;
            }
    
            while (l1Loop != null) {
                while (l2Loop != null) {
                    if (l1Loop.val > l2Loop.val) {
                        result.next = l2Loop;
                        result = result.next;
                        l2Loop = l2Loop.next;
                    } else {
                        break;
                    }
                }
                result.next = l1Loop;
                result = result.next;
                l1Loop = l1Loop.next;
            }
    
            while (l2Loop != null) {
                result.next = l2Loop;
                result = result.next;
                l2Loop = l2Loop.next;
            }
    
            return l1;
    
        }
    }
    

    复杂度分析

    时间复杂度 : O(m+n)
    空间复杂度 : O(1)

    相关文章

      网友评论

          本文标题:LeetCode 链表 > 21. 合并两个有序链表

          本文链接:https://www.haomeiwen.com/subject/tqjzzqtx.html