0

我不确定这是否是为我的循环列表创建删除方法的正确方法,而且我在让它适用于 1 节点列表时遇到问题。

public void remove() {
    if(first.getNext() == null) {
        first = null;
        first.setNext(null);
    } else {
        Node current = first;
        for(int i = 0; i < getSize() - 1; i++) {
            current = current.getNext();
        }
        first = first.getNext();
        current.setNext(first);
        size--;
    }
}

我让它适用于大于两个的列表,但我不确定这是否是解决问题的最佳方法。有没有人对改进这一点的方法有任何建议,以及让一个节点列表正确删除?即使我将第一个节点设置为空,下一个节点也设置为空,它仍然返回我的原始输入。

编辑:对于将来查看此内容的任何人,我刚刚打印出一条消息,说您无法删除该元素。因为我的任务对于要做什么非常模棱两可。

4

1 回答 1

1

这是行不通的。我想,它根本无法执行以下部分:

    first = null;
    first.setNext(null);

我认为这会引发 NullpointerException 的原因。您首先将 设置first为 null ,然后尝试取消引用null.

我不会为您提供确切的代码(因为这是某种家庭作业,对吧?;)),但请查看维基百科(http://en.wikipedia.org/wiki/Doubly_linked_list)中的伪代码:

  function remove(List list, Node node)
    if node.prev == null
      list.firstNode := node.next
    else
      node.prev.next := node.next
    if node.next == null
      list.lastNode := node.prev
    else
      node.next.prev := node.prev
    destroy node
于 2013-05-31T17:17:37.193 回答