从O(1)中的LinkedList中删除没有迭代器(java)的最后一个元素

时间:2018-10-31 11:27:52

标签: java linked-list

我正在尝试实现自己的LinkedList,现在我的问题正在消除。 我需要至少删除O(1)中的最后一个元素,但是我不能这样做。 在我所看到的每种情况下,人们都在从头到(last-1)元素进行简单循环,以这种方式去除尾巴。但是它具有O(n)的复杂度。 我也从java.util找到了LinkedList。正在使用迭代器。 所以我的问题是-是否可以在不使用迭代器的情况下删除最后一个元素,或者我也需要实现迭代器类? 那就是我的popBack()方法代码:

private void popBack(){
    if(!isEmpty()) {
        --size;
        T temp = tail.info;

        //tail.next = null;
        //tail.prev.getNext();
        tail = tail.prev;
        System.out.println(temp);
    }
    else{
        System.out.println("OH SHI-, List is empty");
    }
}

(在这里我改变了我的尾巴,但是我没有用那个尾巴连接上一个元素,所以前一个元素仍然是一个旧元素)

1 个答案:

答案 0 :(得分:0)

看起来您的列表是一个双链表,并且您确实引用了最后一个元素(代码中的tail),这意味着您可以在O(1)的时间内删除最后一个元素。

您的尝试几乎是正确的。除了将tail引用更改为引用tail.prev之外,还必须将新尾巴的next引用设置为null

列表中的其他节点均不受影响。

private void popBack(){
    if(!isEmpty()) {
        --size;
        T temp = tail.info;
        tail = tail.prev;
        tail.next = null;
        System.out.println(temp);
    }
}

对于被删除的元素是唯一元素(在这种情况下tail.prev可能为null)的情况下,您可能必须添加另一项检查,并且在删除之后列表为空。