私は宿題の一部として自分のリンクリスト(およびリストノード)をJavaで書いていました。Javaのリンクリストから削除するには?
今、エントリを消去しようとしていますが、機能が動作していません。
私が概念を知っている:以前に保つノードに対して
- 検索;
- 前のノードに次のノードを指すように指示します。
- ノードの使用を戻したり停止したりして、ノードを消去します。
何らかの理由で機能しません。私は同じ値を持つノードを何度も何度も削除することができます。私はそれがJavaポインタに関連する何かであると思う。
コード:
ノード:
public class SimpleNode<E> {
private E value;
private SimpleNode<E> next;
public SimpleNode() {
this.value = null;
this.next = null;
}
public NoSimples(E data, SimpleNode<E> ref) {
this.value = data;
this.next = ref;
}
// Getters and Setters
}
一覧:
public class LinkedList<E> implements Iterable<SimpleNode<E>> {
private SimpleNode<E> head;
private int size = 0;
public LinkedList() {
this.head = new SimpleNode<E>();
}
public void add(SimpleNode<E> node) {
this.addFirst(node.getValue());
}
public void addFirst(E item) {
SimpleNode<E> nonde = new SimpleNode<E>(item, this.head);
this.head = node;
size++;
}
public void add(E value) {
this.addFirst(value);
}
public SimpleNode<E> removeFirst() {
SimpleNode<E> node = this.head;
if (node == null) {
return null;
} else {
this.head = node.getNext();
node.setNext(null);
this.size--;
return node;
}
}
public SimpleNodes<E> remove(E value) {
SimpleNode<E> nodeAnt = this.head;
SimpleNode<E> node = this.head.getNext();
while (node != null) {
if (node.getValue()!= null && node.getValue().equals(value)) {
nodeAnt.setNext(node.getNext());
node.setNext(null);
return node;
}
nodeAnt = node;
node = node.getNext();
}
return null;
}
// Other irrelevant methods.
}
Javaのコンセプトは、オブジェクトに参照がなくなると、最終的にGCがクリーンアップするということです。あなたの場合、必要なのはあなたのLinkedListからオブジェクトを削除することだけです。 LinkedListから削除するには、を繰り返し、Iteratorから.remove()を呼び出します。 –
ええ、私は上記のコードでそれをしようとしていますが、機能していません。 –
remove: 'nodeAnt = this.head'で最初のノードをスキップしているようです。これは、最初のノードが見える前にすでに最初のノードが「前」であることを意味します。 – fileyfood500