2017-04-21 43 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仍然指着绿色箭头。

如果您得出了同样的结论:请确保您明白,这正是您在问题中描述的情况下发生的情况。

如果你认为鲍勃将在什么现在被人指指点点,我鼓励你只是尝试一下在现实生活中;)