なぜたびに私たちは、新しいノードを作成しp.next
、我々が割り当てる必要がありますので、ヌルにthis.next
?常にではないnullをどのような方法?そしてそれがどの役割を果たしにおけるありませんかLinkedList
?私たちがプリントアウトしようとした場合this.next
、それは次のようになりますヌル我々はそれを割り当てる前に、ヌル。
System.out.println(this.next);
結果はヌル
また、もしp.next
新しいポイントnode
我々が設定する必要がある理由p = p.next
同じノードを指すように?最後のpに設定尾への目的は、私たちは設定できない場合はtail = p.next
ループが終了したため後の最後の一つです。
public class EnkeltLenketListe<T>{
private T value;
private Node<T> next;
private Node(T value, Node<T> next)
{
System.out.println(this.next);
this.next = next;
this.value = value;
}
}
private Node<T> head, tail;
public EnkeltLenketListe(T[] a)
{
this();
int i = 0; for (; i < a.length && a[i] == null; i++);
if (i < a.length)
{
head = new Node<>(a[i], null);
Node<T> p = head;
for (i++; i < a.length; i++)
{
if (a[i] != null)
{
p.next = new Node<>(a[i], null);
p = p.next;
}
}
tail = p;
}
}
我々はthis.nextに割り当てるnullに必要なように、各時間は、私たちは、新しいノードp.nextを作成するのはなぜ?
ノードを追加し、除去しながら、私たちは、ノードが意図しないノードを指していないことを確認する必要があります。彼らはいくつかのノードを指している場合があります。
私たちは、同じノードを指すように設定P = p.nextに必要とする理由
あなたはリストを横断している間、リスト内の自分の位置を特定し、維持するために、あなたが頭から開始し、残りのノードに進みます。場合p=p.next
、どのようにリストをトラバースするつもりですか?
ループが終了したため後の最後のものである我々だけセットテール= p.nextすることはできません。
いいえ、私たちは、このケースであるためできないp.next
と同じですp.p.next
ので、p
に設定したp.next
ループの内側。前に、次を追加することによって、それをテストtail=p
、あなたが取得する必要はnullを
System.out.println(p.next);
編集されました:
あなたのリストを単独で次のノードへのポインタを持っている必要があり、尾を除くすべてのノードを意味し、リストにリンクされている、あなたが開始しました
head = new Node<>(a[i], null);
Node<T> p = head;
この場合p
とhead
指しているNode 0
下記を参照の画像を。配列内の次のノードがnullでない場合、ループのために何が起こるか見てみましょう
p.next = new Node<>(a[i], null);
p = p.next;
この場合p.next
を指しているNode 1
通りであり、(下の画像を参照)p
を指ししたNode 0
今を指すように設定されていますNode 1
。その両方が「ノード1 'を指しています。最後の1:
tail = p;
あなたは、なぜ我々だけでないことを言いましたかtail=p.next
?いいえ、私たちは、このケースであるためできないp.next
と同じですp.p.next
ので、p
に設定したp.next
ループの内側。