-4
주어진 색인에서 노드를 삽입 및 제거 할 수 없습니다.제네릭을 사용하는 이중 연결 목록 구현
문제는 인서트를 한 위치에 놓고 제자리에서 제거하십시오.
I가 중간에있는 요소를 삽입 할 경우 세 가지 요소가 있다면
, 그것은 을 삽입하지만 널로 인쇄되어 삽입 된 노드 이후이었다. 나는 어디서 잘못 됐어. 다음
내 코드는,
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