0

我目前坚持使用 Java 实现双向链表。我实现了一些方法(addLast/addFirst/size/Remove/removeLast/removeFirst/output)。当我尝试在我的列表中添加一个元素时,输出将始终为空。代码只是一个原始版本,很确定它有一些错误。这是列表的 Element 类:

public class Element<E> {
private Element<E> next;
private Element<E> prev;
//private String value;
private Object elem;
private E value;

public Element() {
    next = null;
    prev = null;
    value = null;
}

/**
 * @param value the value to set
 */
public void setValue(E value) {
    this.value = value;
}

/**
 * @return the value
 */
public E getValue() {
    return value;
}

public Object getElem() {
    return elem;
}

public void setElem(Object elem) {
    this.elem = elem;
}



/**
 * @return the next
 */
public Element<E> getNext() {
    return next;
}
/**
 * @param next the next to set
 */
public void setNext(Element<E> next) {
    this.next = next;
}
/**
 * @return the prev
 */
public Element<E> getPrev() {
    return prev;
}
/**
 * @param prev the prev to set
 */
public void setPrev(Element<E> prev) {
    this.prev = prev;
}

这里是具有 addFirst 和输出方法的实际 List 类。

    public class List<E> {
private Element<E> first;
private Element<E> last;
private int size;
private Element<E> element = this.first;


/**
 * @param value uebergebener Wert fuer Listenelement
 * Fuege ein Listenelement an erster Stelle in die Liste ein
 */
public void addFirst(E value) {
    Element<E> newElement = new Element<E>();
    newElement.setValue(value);

    if (size == 0) {
        first = newElement;
        last = newElement;
    }
    else {
        newElement.setNext(first);
        first.setPrev(newElement);
        first = newElement;
    }
    size++;
}
public void output() {
    Element<E> temp = first;
    while (temp != null) {
        System.out.println(temp.getElem());
        temp = temp.getNext();
    }

这里是测试类

    public static void main(String[] args) {
    List<String> newList = new List<String>();
    newList.addFirst("bla");


    newList.output();

我真的被困在这里了。Element类中的构造函数错了吗?提前致谢!

4

1 回答 1

3

首先,令人困惑的是为什么你同时拥有

private Object elem;
private E value;

那些有什么区别?我会摆脱elem字段和所有相关的 getter/setter。

但是,您真正的问题是您从未在代码中设置 elem,因此只需将output方法更改为

System.out.println(temp.getValue()); // instead of temp.getElem()

它会起作用。

于 2013-11-05T17:25:32.137 回答