LinkedList删除方法

时间:2008-11-07 01:14:30

标签: java data-structures linked-list

什么是双向链表删除方法?

6 个答案:

答案 0 :(得分:20)

Bill the Lizard所说的相同算法,但以图形方式: - )

Remove From Linked List
(来源:jaffasoft.co.uk

答案 1 :(得分:17)

一般算法如下:

  • 找到要删除的节点。
  • node.previous.next = node.next
  • node.next.previous = node.previous
  • node.previous = null
  • node.next = null
  • 如果您处于非GC环境中,请处置节点

您必须检查上一个和下一个节点是否为空,以查看您是否正在移除头部或尾部,但这些是容易的情况。

答案 2 :(得分:3)

public void remove ()
{
    if (getPreviousNode () != null)
        getPreviousNode ().setNextNode (getNextNode ());
    if (getNextNode () != null)
        getNextNode ().setPreviousNode (getPreviousNode ());    
}

答案 3 :(得分:1)

双重链接列表实现删除方法(来自我的第二个编程任务):

public void remove(int index) {
    if(index<0 || index>size())
    throw new IndexOutOfBoundsException("Index out of bounds. Can't remove a node. No node exists at the specified index");
    if(size()==0) {
        throw new NullPointerException("Empty list");
    }
    if(!isEmpty()) {
        Node current;
        //starting next one to our head
        current = head.next;
        for(int i=0;i<index;i++) {
            current = current.next;
        }
        current.previous.next = current.next;
        current.next.previous = current.previous;
        numOfNodes--;
        sizeChangeCount++;
    }
}

public boolean remove(T o) {
    Node current = head;
    for(int i=0;i<size();i++) {
        current=current.next;
        if(current.data.equals(o)) {
            current.previous.next = current.next;
            current.next.previous = current.previous;
            numOfNodes--;
            sizeChangeCount++;
            return true;
        }           
    }
    return false;
}

答案 4 :(得分:0)

您是否要求api中的方法名称?假设您询问的是java.util.LinkedList实际上是一个双链表,那么这个答案就会被删除。

...或者您是在询问从该类型的数据结构中删除元素的算法名称是什么?嗯..答案也是删除一个元素。现在对于实际算法来说......它实际上只是改变前一节点中的下一个指针和下一个节点中的最后一个指针。但是,如果您使用来自多个线程的数据结构,则需要同步remove方法,或者按照对数据结构的使用模式有意义的顺序执行删除步骤。

答案 5 :(得分:0)

当前指针指针怎么样?你必须将crnt移动到下一个节点。 http://pastebin.ca/1249635