循环列表删除节点

时间:2013-05-31 17:07:20

标签: java data-structures circular-list

我不确定这是否是为我的循环列表创建删除方法的正确方法,我也遇到了使其适用于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--;
    }
}

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

编辑:对于将来关注此事的任何人,我只是打印出一条消息,说明您无法删除该元素。因为我的任务对于该怎么做非常模糊。

1 个答案:

答案 0 :(得分: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