-4
特定のインデックスにノードを挿入および削除できません。ジェネリックを使用した二重リンクリストの実装
問題は、ある位置に挿入して、その位置で取り除くことです。
三つの要素があった場合、私は真ん中の要素を挿入する場合、それ は挿入私が挿入されたノードが ヌルとして印刷された後ました。どこが間違っていたのですか?ここで
私はあなたの答えを変更した
public class DoublyLinkedList<E> {
private static class Node<E> {
private E element;
private Node<E> prev;
private Node<E> next;
public Node(E e, Node<E> p, Node<E> n) {
this.element = e;
this.prev = p;
this.next = n;
}
public E getElement() {
return this.element;
}
public Node<E> getPrev() {
return this.prev;
}
public Node<E> getNext() {
return this.next;
}
public void setPrev(Node<E> p) {
prev = p;
}
public void setNext(Node<E> n) {
next = n;
}
}
private Node<E> header;
private Node<E> trailer;
private int size = 0;
public DoublyLinkedList() {
header = new Node<> (null, null, null);
trailer = new Node<> (null, header, null);
header.setNext(trailer);
}
public int size() {
return size;
}
public boolean isEmpty() {
return size == 0;
}
/** Returns (but does not remove) the first element of the list. */
public E first() {
if (isEmpty()) {
throw new NoSuchElementException("List empty");
}
return header.getNext().getElement();
}
/** Returns (but does not remove) the last element of the list. */
public E last() {
if (isEmpty()) {
throw new NoSuchElementException("List empty");
}
return trailer.getPrev().getElement();
}
public E indexOf(int pos) {
if (isEmpty()) {
throw new NoSuchElementException("List empty");
}
Node<E> node = header.getNext();
for (int i = 0; i < pos; i++) {
node = node.getNext();
}
return node.getElement();
}
// public update methods
public void addFirst(E e) {
add(e, header, header.getNext());
}
public void addLast(E e) {
add(e, trailer.getPrev(), trailer);
}
public void addAtPosition(E e, int pos) {
Node<E> temp = header.getNext();
for (int i = 0; i < pos; i++) {
temp = temp.getNext();
}
add(e, temp.getPrev(), temp.getNext());
temp.setNext(temp.getNext());
}
public E removeFirst() {
if (isEmpty()) {
throw new NoSuchElementException("List empty");
}
return remove(header.getNext());
}
public E removeLast() {
if (isEmpty()) {
throw new NoSuchElementException("List empty");
}
return remove(trailer.getPrev());
}
public E removeAtPosition(int pos) {
if (isEmpty()) {
throw new NoSuchElementException("List empty");
} else {
Node<E> node = header.getNext();
for (int i = 0; i < pos; i++) {
node = node.getNext();
}
return remove(node.getNext());
}
}
// private update methods
/** Adds element e to the linked list in between the given nodes. */
private void add(E e, Node<E> predecessor, Node<E> successor) {
Node<E> node = new Node<> (e, predecessor, successor);
predecessor.setNext(node);
successor.setPrev(node);
size++;
}
/** Removes the given node from the list and returns its element. */
private E remove(Node<E> node) {
Node<E> predecessor = node.getPrev();
Node<E> successor = node.getNext();
predecessor.setNext(successor);
successor.setPrev(predecessor);
size--;
return node.getElement();
}
public String toString() {
String str = "";
Node< E> node = header;
while (node.getNext() != null) {
node = node.getNext();
str = str + node.getElement() + "-->";
}
return str;
}
}
あまりにも多くのコードがここにありますので、私はこの質問をdownvotedしています。あなたの問題がどこにあるのかを明確にするためには、問題を直接引き起こしていないコードを削除してください。もしそれを10行以下に減らすことができれば、私はdownvoteを引っ込めることを検討します。参照:[最小限で完全で検証可能な例の作成方法](http://stackoverflow.com/help/mcve)と[小規模プログラムのデバッグ方法](https://ericlippert.com/2014/03/05)/how-to-debug-small-programs /) –
このコードはどうなっていますか?それは意味をなさない: 'temp.setNext(temp.getNext());' – ubadub