このコードは、JavaのLinkedList実装のものです。このメソッドは、リストのインデックスポイントに文字列要素を追加し、私のcsブックから取得します。Java Linked Listのポインターの混同
リンクリストクラスが2つのグローバルプライベート変数
Node first;
Node last;
public void add(int index, String e) {
if (index < 0 || index > size()) {
String message = String.valueOf(index);
throw new IndexOutOfBoundsException(message);
}
// Index is at least 0
if (index == 0) {
// New element goes at beginning
first = new Node(e, first);
System.out.println("ran");
if (last == null)
last = first;
return;
}
// Set a reference pred to point to the node that
// will be the predecessor of the new node
Node pred = first;
for (int k = 1; k <= index - 1; k++) {
pred = pred.next;
}
// Splice in a node containing the new element
pred.next = new Node(e, pred.next);
System.out.println(toString());
// Is there a new last element ?
if (pred.next.next == null)
System.out.println("ran");
last = pred.next;
}
私の質問
を持っている私はNode first, last
が
あなたがそして、あなたが要素「4」のインデックスに3
ので、リストは好き["1","2","3","4","7","4","5,"6"]
に見える追加しますが、addメソッドのコードを見ると、私は方法がわからない
["1","2","3","7","4","5,"6"]
のように見えますイスト最初または最後ノードポインタが更新されます。インデックスが0でなく、最後は変更されませんので、私の心の中でこれらが実行コードの唯一の作品があるので
EDIT
ノードfirst
はtoStringメソッドで使用されているオブジェクト(図示されていない)追加する前に収集
// Set a reference pred to point to the node that
// will be the predecessor of the new node
Node pred = first;
for (int k = 1; k <= index - 1; k++) {
pred = pred.next;
}
// Splice in a node containing the new element
pred.next = new Node(e, pred.next);
System.out.println(toString());
私はこの追加メソッドをテストしています。 – cheesey