私はリンクされたリストの最後にアイテムを追加しようとしています(これは宿題ではなく、自分のためのエクササイズです)。ここでこのLinkedList addLast実装はなぜ機能しますか?
は、プログラムである:ここでは
public class CustomLinkedList {
private static Node head = null;
private int size = 0;
public static void main(String[] args) {
CustomLinkedList myList = new CustomLinkedList();
myList.add(5);
myList.add(9);
myList.add(3);
System.out.println("List Size: " + myList.size);
myList.print();
}
private int size() {
return this.size;
}
private void print() {
Node temp = head;
for (int i=0; i<=size-1;i++){
System.out.print(temp.value + " ");
temp = temp.next;
}
System.out.println();
}
private void add(int value) {
if (head == null) {
head = new Node();
head.value = value;
head.next = null;
size++;
} else {
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = new Node();
(temp.next).value = value;
size++;
}
}
}
は私のNodeクラスである:ここで
public class Node {
public int value;
public Node next;
public int getValue(){
return this.value;
}
}
は、私が起こっていると思うものです:
1.私は元/継続的なリストを持っています「頭」で始まる
2.そのリストに追加したい。
3.それに追加するには、その終わりを見つける必要があります。 tempという名前の新しいノードを作成することでこれを行います(これは元のリストの単なるコピーです)。
4.最後に到達するまでコピー(temp)をトラバースします。
5.終了に達すると、新しいノードが作成されます。
私にとって、これは私のコードが停止するところです。さて、私の心の中で、私は、「あなたはあなたの新しいノードを持っています。どこに行く必要があるか分かります。実際のリストを見て追加してください」というコードを追加する必要があります。
しかし、私はそれを持っていません。私のデバッガ(下の画像)によれば、正しいことが起こっていますが、元のリストに新しいノードを追加するという魔法は見られません。これはどのように機能していますか?
編集:私は(1 hereのような)他の実装を見ていた
。それは非常に似て見えた。しかし、私はまだそれがヘッドを(またはhead.next)にtempを割り当てることなく動作する理由を見つけることができませんでした。私は理論上リンクリストを取得すると信じています。私はこのビットがなぜ機能するのか分かりません。
「head = temp」の行は何ですか?このコードは大丈夫ですが、大幅に縮小してリファクタリングすることができます。 – Bohemian
@Bohemianに加えて、C++コードはJavaコードに対して逆の順序で値を追加しています。 –
@Bohemian私は自分の質問を編集しようとしました。私はコード内で起こっていたことと何が起こっているのかを説明しました。うまくいけば、それは私の質問をより明確にします。 – JustBlossom