2016-10-03 103 views
-2

while(cur!=head)應該在節點4執行的條件,因爲它開始 在節點3,該方案在do塊執行語句至少一次,那麼它會在節點4讀取, node4與頭節點node3相同。的Java做while循環不斷循環,即使它不符合

我的程序應該返回。

Actual output: 3 3 3 3 4 5 1 2 

Expected output: 3 3 3 4 5 1 2 3 

實際的輸出是正確的,我的預期成果是wrong.However,我 只是想知道,當CUR等於頭,這不符合資格的 條件while(cur!=head),但它可以繼續運行?爲什麼?

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