2017-08-28 19 views
0

我正在嘗試創建一個通過循環添加到的LinkedList。爲什麼我不能修改在所述循環內循環外聲明的LinkedList?

public class ListNode { 
    int val; 
    ListNode next; 
    ListNode(int x) { val = x; } 
} 

public class Something { 
    public void method() { 

     ListNode node = null; 
     ListNode out = node; 
     for (int i = 0; i < 10; i++) { 
      node = new ListNode(i); 
      node = node.next; 
     } 

    return out; 
    } 
} 

這部作品在我的頭的方式是這樣的:

node->null; 

node->null; 
    ^
     | 
     out 

out->0->null 
     ^
      | 
     node 
... 
out->0->1->2->3->4->5->6->7->8->9->null 
            ^
            | 
            node 

然而,out返回NULL,彷彿循環永遠不會跑的。我如何獲得我描述的行爲?

+5

您最初將'node'的值賦給'out',它是'null'。那之後你從來沒有改變過。你對變量和引用感到困惑嗎? –

+1

您似乎對引用的工作方式感到困惑。僅僅因爲你將_out_指向_node_並不意味着每當你將_node_指向某個事物時,_out_都跟在後面,並指向那個。 –

回答

1

這應該可能按預期工作。您首先必須爲您分配下一個節點的初始節點分配一個初始節點。在新創建的下一個節點上,您甚至可以創建下一個節點。

public static void main(String[] args) { 
    ListNode k = Something.method(); 

    while(k.next != null){ 
     System.out.println(k.val); 
     k = k.next; 
    } 

} 

private static class ListNode { 
    int val; 
    ListNode next = null; 
    ListNode(int x) { val = x; } 
} 

public static class Something { 
    public static ListNode method() { 

     ListNode node = new ListNode(0); 
     ListNode out = node; 

     for (int i = 1; i < 10; i++) { 
      node.next = new ListNode(i); 
      node = node.next; 
     } 

     return out; 
    } 
} 

然後,您返回您的初始節點,其中包含您的「第一個」節點下一個節點。

相關問題