2017-11-28 8 views
1

申し訳ありませんが、この質問のタイトルは完全にはっきりしない場合があります。LinkedListsのノードがJavaで直接変更されることなく、なぜ/どのように変更されるのか説明できますか?

次のノードは、次の文字のリストを指しています。 head - > [a] - > [b] - > [c] - > [ D]リストのノードは以下のクラスのインスタンスを次のコードを実行した後に印刷されますどのような

public class Node { 
    public char value; 
    public Node next; 
} 

ある

Node ptr1, ptr2, p; 
ptr1 = head; 
ptr2 = head.next; 
ptr1.next = ptr2.next.next; 
ptr2.next.next = ptr1; 
p = head; 
head = head.next; 
while(p!=null){ 
    System.out.print(p.value + " "); 
    p=p.next; 
} 

どうやら答えはDです。誰かが私にこれを説明することはできますか?

これらの問題を解決に向けて、私の手順だった:

ptr1 = head; //ptr1 -> [a]->[b]->[c]->[d] 

ptr2 = head.next; //ptr2 -> [b]->[c]->[d] 

prt1.next = ptr2.next.next; //prt1 -> [a]->[d] 

prt2.next.next=prt1; //prt2 -> [b]->[c]->[a]->[d] 

p=head; //p-> [a]->[b]->[c]->[d] 

head=head.next; // head-> [b]->[c]->[d] 

だから私は答えはちょうど明らかではないオリジナルのノード(A、B、C、D)、を反復していることを考えていました私はちょうど "頭"が元の状態よりも何になったのか分かりません。ノード変数は元のノードを何とか変更しますか?これはこれまで私がJavaについて知っていたすべてから私には意味をなさない。申し訳ありませんが、これは愚かな質問である場合、私は理解していないだけで、私はこれに関してオンラインで何かを見つけることができませんでした。ありがとう。

答えて

1

この時点までに問題はありません。

prt2.next.next=prt1; //prt2 -> [b]->[c]->[a]->[d] 

次に、この次のステップでは、headは変更されていません。あなたはそれについて正しい。今度は、head[a]を指していて、常に[a]を指していますが、[a]が別の場所に移動しています。

p=head; //p-> [a]->[d] 

その後、我々はhead.nextheadを割り当てるが、我々は再びheadを使用したことがないので、それさえ問題ではありません。したがって、我々は[a]以上を反復しており、その結果、出力は[d]です。

2

これは用紙に描画する必要がありますので、何が起こっているのかを確認できます。

head → [a] → [b] → [c] → [d] 

ptr1 = head;

 ptr1 
     ↓ 
head → [a] → [b] → [c] → [d] 

次のよう

配列であります

 ptr1 ptr2 
     ↓  ↓ 
head → [a] → [b] → [c] → [d] 

ptr1.next = ptr2.next.next;

 ptr1 ptr2 
     ↓  ↓ 
     ↓ [b] → [c] 
     ↓   ↓ 
head → [a] → → → → [d] 

ptr2.next.next = ptr1;

 ptr1 ptr2 
     ↓  ↓ 
     ↓ [b] → [c] 
     ↓   ↓ 
head → → → → → → → [a] → [d] 

p = head;

 ptr1 ptr2 
     ↓  ↓ 
     ↓ [b] → [c] 
     ↓   ↓ 
head → → → → → → → [a] → [d] 
        ↑ 
        p 

head = head.next;

 ptr1 ptr2  head 
     ↓  ↓   ↓ 
     ↓ [b] → [c] ↓ 
     ↓   ↓  ↓ 
      → → → → → [a] → [d] 
        ↑ 
        p 
+0

うわー、ありがとうあなたはこのビジュアルのためにそんなにあなた。本当に物事をクリアしました。ありがとう:) – digiHarmonious

関連する問題