2017-02-05 9 views
0

質問is- 2つのソート済みリンクリストをマージします。 詳細-visit https://www.hackerrank.com/challenges/merge-two-sorted-linked-lists サイトでこれを送信すると、「タイムアウトのために終了しました」と表示されます。コードの問題とその修正方法を教えてください。hackerrankでタイムアウトしたためにこのコードが終了している理由

Node MergeLists(Node headA, Node headB) { 
// This is a "method-only" submission. 
// You only need to complete this method 
if(headA==null){ 
    return headB; 
}else if(headB==null){ 
    return headA; 
}else{ 
    Node h,t; 
    if(headA.data>=headB.data){ 
     h=headB; 
     t=h; 
     h=h.next; 
     headB=headB.next; 
    }else{ 
     h=headA; 
     t=h; 
     h=h.next; 
     headA=headA.next; 
    } 
    while(headA!=null && headB!=null){ 
     if(headA.data>=headB.data){ 
     h.next=headB; 
     h=h.next; 
     headB=headB.next; 
    }else{ 
     h=headA; 
     h=h.next; 
     headA=headA.next; 
    } 
    } 
    if(headB==null){ 
     h=headA; 
    } 
    return t; 
} 

}

+0

あなたは、アルゴリズムの試みが何をすべきかを言葉で説明できますか? (マージリストよりも詳細) –

+0

結果リストの先頭としてtが指定されたifステートメントのhをh.nextに設定するステートメントは正しくありません。 hは、次のフィールドに後続ノードへのリンクを設定する必要があるノードを指しますが、最初のノードではこれが最初のノードです。それ以降はそれを進めることになります。また、最後のif文が正しく見えません。それは左側にh.nextを含むべきであり、対称的でなければならない。 AとBのリストです。 – laune

+0

launeありがとう、私はそれを理解しました。 –

答えて

0

コードが正しく二つのリストをマージするためには表示されません、ラウンは、エラーのほとんどについてコメントし、プラス他に次のコード中で()ループは、修正を必要とする(それwhile()ループのifと同じロジックに従う必要があります)。タイムアウトは、コードが長時間かかるためではなく、返されたマージされたリストのハッカーブランクポストマージチェックがサイクル内にスタックされているか、または悪い参照の後にスタックされているためです。

MergeLists関数をデバッグするためにMergeLists関数を呼び出すテストプログラムを作成してみてください。 Javaはポインタへのポインタを持っていない、あなたはダミーノードを使用してコードを簡素化することができることを制限を回避するには

Node t = new Node; 
    Node h = t; 
    // ... h.next = ... merge the lists while advancing h 
    return t.next; 
関連する問題