LeetCodeノート:21.Merge Two Sorted Lists

2023 ワード

質問:
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
注意:
2つの順序付きチェーンテーブルを結合し、新しいチェーンテーブルを返します.新しいチェーンテーブルには、元の2つのチェーンテーブルのすべてのノードが含まれている必要があります.
考え方:
2つの秩序あるチェーンテーブルを統合するのは実は構想が直接的で、2つのチェーンテーブルの最初のノードから大きさを比較して、小さいものを新しいチェーンテーブルに置いて、それから後ろに移動して比較を続けて、たぶん構想はこのようにして、ただ実現するのが面倒です.また、2つのチェーンテーブルのキー値を1つの配列に配置し、配列をソートし、配列の要素を新しいノードに順番に配置し、新しいチェーンテーブルを入れればいいという奇抜な考え方も考えられています.
コード(Java):
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) return l2;
        else if (l2 == null) return l1;
        
        ListNode result;
        ListNode mark;
        
        if (l1.val <= l2.val) {
            result = l1;
            l1 = l1.next;
        } else {
            result = l2;
            l2 = l2.next;
        }
        mark = result;
        
        while (l1 != null) {
            if (l2 != null && l2.val < l1.val) {
                mark.next = l2;
                mark = mark.next;
                l2 = l2.next;
            } else {
                mark.next = l1;
                mark = mark.next;
                l1 = l1.next;
            }
        }
        if (l2 != null) mark.next = l2;
        return result;
    }
}

他山の石:
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;
        }
}

この方法の考え方は実はそれほど悪くないが,再帰的な方法を使っている.1 msかかりますが、上の私のコードは16 msかかります.本当にこんなに大きな違いがありますか.の
統合:https://github.com/Cloudox/LeetCode-Record
作者のトップページを見る