2016-10-03 9 views
-2

マイwhile(cur!=head)が、それはノード3で を開始するので、プログラムが少なくとも一度doブロック内の文を実行し、ノード4で実行することになっている、それはノード4で読み込まれます行いますnode4はhead3であるheadノードと同じです。Javaのループがループを維持しながら、でもそれは条件を満たしていない

私のプログラムは返されます。

Actual output: 3 3 3 3 4 5 1 2 

Expected output: 3 3 3 4 5 1 2 3 

実際の出力が正しい、私の予想出力はcurが頭に等しいとき、私は ちょうど 条件while(cur!=head)に資格がないている、疑問に思って、それが実行し続けることができ、wrong.Howeverのですか?どうして?

class LinkedNode 
{ 
    int val; 
    LinkedNode next; 
    LinkedNode (int x) 
    { 
     val = x; 
     next = null; 
    } 
} 



class Solution 
{ 

    public static void main(String[] args) 
    { 
     LinkedNode node1 = new LinkedNode(1); 
     LinkedNode node2 = new LinkedNode(2); 
     LinkedNode node3 = new LinkedNode(3); 
     LinkedNode node4 = new LinkedNode(3); 
     LinkedNode node5 = new LinkedNode(3); 
     LinkedNode node6 = new LinkedNode(3); 
     LinkedNode node7 = new LinkedNode(4); 
     LinkedNode node8 = new LinkedNode(5); 

     node1.next = node2; 
     node2.next = node3; 
     node3.next = node4; 
     node4.next = node5; 
     node5.next = node6; 
     node6.next = node7; 
     node7.next = node8; 
     node8.next = node1; 

     LinkedNode after = check(node3); 
     print_list(after); 
    } 


    public static void print_list(LinkedNode head) 
    { 
     LinkedNode cur = head; 
     do 
     { 
      System.out.print(head.val + " "); 
      head = head.next; 
     } 
     while (cur!= head);//same question as the below 
    } 

    public static LinkedNode check(LinkedNode head) 
    { 

     LinkedNode cur = head; 
     do 
     { 
      cur = cur.next; 
     } 
     while(cur!=head);// this line is supposed to execute and exit at node4,since node4 is equal to node3(head) 

     return cur; 
    } 

} 
+0

私はあなたが何をしようとしているのかはっきりしていません。 'check'では、メソッドは' cur!= head'と同じくらいループし続けます。これは、ループを終了するときに、 'cur == head'がループを終了する唯一の時間なので、' cur == head'を持つことを意味します。だから、基本的に、 'check'は常に' head'を返します(無限ループするかクラッシュしない場合)。 – ajb

+0

ブラインド実行中にコードが実行される最初に実行されたときには何もチェックされない –

+0

check()関数が使用される理由を教えてください。 –

答えて

1

オブジェクトは参照ではなく値で比較されます。あなたのロジックは正しいです。ノード3は、別々のオブジェクトであるためノード4と決して等しくはありませんが、必要なのはその値を比較することです。

while(cur.val != head.val) 
+1

はい、あなたは正しいです。あなたは@ Shankar Shastriと同じ考えを持っています。 Linkednodeは、値ではなく参照渡しを渡します。あなたの答えをありがとうございました。 – OregonDuck

関連する問題