2017-04-21 52 views
0
/** 
* Definition for singly-linked list. 
* public class ListNode { 
*  int val; 
*  ListNode next; 
*  ListNode(int x) { val = x; } 
* } 
*/ 

      ListNode newNode = null; 
      ListNode nxt = head.next; 
      head.next = newNode; 
      newNode = head; 
      head = nxt; 

這裏是我的想象,當我看到這一點:如何引用Java中的引用?

說我有一個結構

其中------->意味着指向(在內存)

head -------> 1->2->3->4->5->6 

那麼這意味着

ListNode nxt = head.next -------> 2->3->4->5->6 

然後當你這樣做:

head.next = newNode 
head -------> 1->NULL 

那麼應該不是nxt成爲?

nxt -------> NULL 

由於您更改了nxt指向的內容?

+0

但你並沒有改變什麼'nxt'指向。 –

+0

'nxt'不指向'head.next'。 'head.next'和'nxt'是指向同一個對象的獨立引用。改變一個不會影響另一個。順便說一句,爲什麼'newNode == NULL'? – shmosel

+0

用另一種方式表達 - '='指定一個引用;它不會修改被引用的對象。 –

回答

2

但是您沒有更改nxt指向的位置。

ListNode nxt = head.next 

這使得nxt指向同樣的事情head.next,在這種情況下是2。

head.next = newNode 

這改變head.next。它不會改變任何東西; nxt保持原樣,並繼續指向2

+0

那麼如果我做了如下的事情:'head.next.next = null',它會改變整個結構?即從現在的任何參考,我會有'1-> null'而不是舊的1-> 2-> 3'嗎? – sssszzzzzzssszzz

+0

因爲在那種情況下,你正在改變'nxt'指向的對象。 –

0

試想:

你有一個紅色箭頭指向了一大堆綠色箭頭。

現在得到兩個朋友,蒙上眼睛並拿到他們的耳朵(這樣沒人能聽到你告訴另一個人)。我們會打電話給他們說:「有頭的人」和「下一個人」。

拿着Tim的胳膊,指向紅色箭頭。

現在刪除Bob的眼罩。告訴他看看蒂姆指着什麼,並指出任何指向。由於Tim指向紅色箭頭,紅色箭頭指向綠色箭頭,Bob現在指向綠色箭頭。 現在重新申請Bob的眼罩。

接下來,是時候改變紅色箭頭指向的東西了,所以把它轉過90°,所以現在它沒有指向任何東西。

現在你自己問:鮑勃指着什麼?

答案顯然應該是Bob仍然指着綠色箭頭。

如果您得出了同樣的結論:請確保您明白,這正是您在問題中描述的情況下發生的情況。

如果你認爲鮑勃將在什麼現在被人指指點點,我鼓勵你只是嘗試一下在現實生活中;)