2017-04-12 9 views
0

I「は、2つのソートされたリンクリストのマージ」に取り組んでいますが、それは私の頭が正しく更新されていないに見えます。この問題を解決するための二つのソートされたリストをマージしますが、私の頭が更新されていない - Javaの

、私は.valしようとしたが、それは、whileループでは正しく動作しません。

その後、有線の事は、私が.nextしようとしたとき、それが動作することです。私は全く混乱している。 以下の両方のコード(作業中のものと間違ったもの)を入れて、私が行ったことを見ることができます。

は、誰もが私の最初は、してください動作していない理由の説明を与えることができますか?

間違った1:1の作業

/** 
* Definition for ListNode. 
* public class ListNode { 
*  int val; 
*  ListNode next; 
*  ListNode(int val) { 
*   this.val = val; 
*   this.next = null; 
*  } 
* } 
*/ 
public class Solution { 
/** 
* @param ListNode l1 is the head of the linked list 
* @param ListNode l2 is the head of the linked list 
* @return: ListNode head of linked list 
*/ 
public ListNode mergeTwoLists(ListNode l1, ListNode l2) { 
    if (l1 == null) 
     return l2; 
    else if (l2 == null) 
     return l1; 

    ListNode result = new ListNode(5); 
    ListNode head = result; 

    while (l1 != null && l2 != null){ 
     if (l1.val < l2.val){ 
      result = l1; 
      l1 = l1.next; 
     } 
     else{ 
      result = l2; 
      l2 = l2.next; 
     } 
     result = result.next; 
    } 

    if (l1 == null){ 
     result = l2; 
    } 
    else{ 
     result = l1; 
    } 

    return head; 

    } 
} 

public ListNode mergeTwoLists(ListNode l1, ListNode l2) { 
    if (l1 == null) 
     return l2; 
    else if (l2 == null) 
     return l1; 

    ListNode result = new ListNode(5); 
    ListNode head = result; 

    while (l1 != null && l2 != null){ 
     if (l1.val < l2.val){ 
      result.next = l1; 
      l1 = l1.next; 
     } 
     else{ 
      result.next = l2; 
      l2 = l2.next; 
     } 
     result = result.next; 
    } 

    if (l1 == null){ 
     result.next = l2; 
    } 
    else{ 
     result.next = l1; 
    } 

    return head.next; 

} 

唯一の違いは、私が二番目に.next追加することです。

ありがとうございました!

答えて

1

このコードではダミーノードを使用しているため、マージ後にdummy_node.nextがマージされたリストを指すようになります。これにより、コードが単純化され、最初は空のマージリストを条件付きで処理する必要がなくなります。 (CまたはC++では、ダミー・ノードの代わりにノードへのポインタへのポインタを使用できますが、javaには同等のものはありません)。コードは、ダミー・ノードへの参照としてresultとheadの両方を設定することから始まり、結果リストがマージされます。作業コードは元のdummy_node.nextであるhead.nextを返します。動作していないコードは、結合されたリストへの参照ではなく、ダミーノードへの参照であるheadを戻します。

関連する問題