2016-10-03 131 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