双链表删除方法



尝试实现一个方法,该方法删除指定索引处的节点并返回其数据元素。参加一个初学者在线课程,我不知道如何返回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;
    }
}
请记住,E是LinkedList中任何数据类型的占位符。您将像返回任何其他元素一样返回数据。我的建议是,一旦你找到要删除的元素,保存那里的数据,设置新的下一个和上一个引用,然后返回数据。示例:
E returnData = head.data;
//set references
return returnData;

相关内容

  • 没有找到相关文章

最新更新