双链表清除方法

时间:2015-12-28 20:18:28

标签: java linked-list doubly-linked-list

尝试实现一种方法,该方法删除指定索引处的节点并返回其数据元素。参加初级在线课程,我不知道如何返回数据类型E.对不起,如果我的代码很糟糕。

public class MyLinkedList<E> extends AbstractList<E> {
    LLNode<E> head;
    LLNode<E> tail;
    int size;

    /** Create a new empty LinkedList */
    public MyLinkedList() {
        size = 0;
        head = new LLNode<E>(null); 
        tail = new LLNode<E>(null);
        head.next = tail;
        tail.prev = head;

    public E remove(int index) 
    {
        int ithNode = 1; //tracks node path location
        LLNode<E> newNode = new LLNode<E>(null);

        if (index < 0 || index > size()) {
            throw new IndexOutOfBoundsException();
        }

        if (index == 1) {
            newNode = head.next;
            head.next = null;
            head.prev = null;
        } else {
            while (ithNode != index) {
                head = head.next;
                ithNode++;
            }
            if (head.next == null) {
                head.prev.next = null;
                head.prev = null;
            } else {
                head.prev.next = head.next;
                head.next.prev = head.prev;
            }
        }
    }

}

class LLNode<E> 
{
    LLNode<E> prev;
    LLNode<E> next;
    E data;

//Not sure if I should create another constructor here 
    public LLNode(E e) 
    {
        this.data = e;
        this.prev = null;
        this.next = null;
    }
}

1 个答案:

答案 0 :(得分:0)

请记住,E是占位符,无论数据类型将进入LinkedList。您将像返回任何其他元素一样返回数据。我的建议是,一旦你找到要移除的元素,保存那里的数据,设置新的下一个和前一个引用,然后返回数据。例如:

E returnData = head.data;
//set references
return returnData;