21. 2つの順序付けられたリンクリストをマージします(Javaで実装)-LeetCode

目次

トピック:

解決策1:反復(新しいリンクリスト)

解決策2:再帰


トピック:

https://leetcode-cn.com/problems/merge-two-sorted-lists/

2つの昇順リンクリストを新しい 昇順 リンクリストに結合して戻ります。新しいリンクリストは、指定された2つのリンクリストのすべてのノードを接続することによって構成されます。 

 

例:

入力:1-> 2-> 4、1-> 3-> 4
出力:1-> 1-> 2-> 3-> 4-> 4

 

解決策1:反復(新しいリンクリスト)

/**
 * 思路:
 * 新建一个节点
 * 一直往前遍历2个链表
 * 比较l1和l2的值,新链表指向值小的那个节点
 * 如果一个链表走完了,直接把另一个链表加过去
 */
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode head = new ListNode(-1);
        ListNode node=head;
        while (l1!=null&&l2!=null){
            if (l1.val<l2.val){
                node.next=l1;
                node=node.next;
                l1=l1.next;
            }else {
                node.next=l2;
                node=node.next;
                l2=l2.next;
            }
        }
        node.next=l1==null?l2:l1;
        return head.next;
    }

時間計算量:オン

スペースの複雑さ:O1

解決策2:再帰

/**
 * 思路:
 * 递归,每层找到最小的,指向下一个小的(递归的在去找小的)
 * 如果走完了一个链条,直接返回另外一个链条就是最终的结果
 */
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1==null)return l2;
        if (l2==null)return l1;
        if (l1.val>l2.val){
            l2.next=mergeTwoLists(l1,l2.next);
            return l2;
        }else {
            l1.next = mergeTwoLists(l1.next, l2);
            return l1;
        }
    }

時間計算量:オン

スペースの複雑さ:O1

おすすめ

転載: blog.csdn.net/qq_38783664/article/details/110394691