2017-04-21 6 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'は同じオブジェクトを指す別々の参照です。一方を変更しても他方には影響しません。 Btw、なぜnewNode == NULL'ですか? – shmosel

+0

別の言い方をすると、 '='は参照を割り当てます。参照されているオブジェクトは変更されません。 –

答えて

2

しかし、nxtが指している場所は変更されませんでした。

ListNode nxt = head.next 

これは、この場合、これはhead.nextを変える2.

head.next = newNode 

あるhead.nextと同じことにnxtポイントになります。それは他に何も変わらない。 nxtはそれがあったとして残り、想像2.

+0

それでは、もし私が 'head.next.next = null'のようにすると、構造全体が変更されます。つまり、現在のリファレンスから、古い '1-> 2-> 3 'の代わりに' '1-> null''のようなものがありますか? – sssszzzzzzssszzz

+0

その場合、あなたが指しているオブジェクト 'nxt'を変更しているためです。 –

0

を指すように続けます。

あなたは緑の矢印の全体の束を指しつの赤の矢印を持っています。

ここで、2人の友人を取得し、目隠しして耳の部分を取得します(他の人に話すことが誰にも聞こえないようにします)。私たちは彼らを「頭のある男のティム」と「次の人のボブ」と呼ぶつもりです。

ティムの腕を持って赤い矢印を指してください。

ここでBobの目隠しを取り外します。ティムが何を指しているのかを見て、それが何を指しているのかを指摘するように教えてください。ティムは赤い矢印を指し、赤い矢印は緑の矢印を指しているので、ボブは緑の矢印を指し示すようになります。 今度はボブの目隠しを再適用してください。

次に、赤い矢印が指しているものを変更するため、90度回して、今度は何も指さないようにします。

今、あなた自身を助ける:ボブは何を指していますか?

答えは明らかにボブがまだ緑色の矢印を指していることです。

同じ結論に達した場合:質問に記載された場合とまったく同じであることを理解してください。

あなたはボブが今何を指してことだろうと思った場合、私はちょうど実際の生活の中でそれを試してみることをお勧め;)

関連する問題