删除节点在Java中的双向链表[关闭]

问题描述 投票:3回答:3

我正在学习有关使用Java双向链表,我已经找到了如何删除一个节点与特定键教程。

这是代码:

public Node deleteKey(int key) {
    Node current = first;
    while (current.getData() != key) {
        current = current.getNext();
        if (current == null) {
            return null;
        }
    }

    if (current == first) {
        first = current.getNext();
    } else {
        current.getPrevious().setNext(current.getNext()); 
    }

    if (current == last) {
        last = current.getPrevious();
    } else {
        current.getNext().setPrevious(current.getPrevious()); 
    }

    return current;
}

我想问问你,如果这个代码是正确的。在我看来,这是不正确的,因为他还需要做到这一点:

current.setNext(null);
current.setPrevious(null);
java data-structures linked-list doubly-linked-list
3个回答
5
投票

调用current.setNext(null)current.setPrevious(null)是没有必要的,因为调用deleteKey(int key)后,没有列表的Node将包含对去除Node(由current引用)的引用,所以也无所谓什么Nodes删除的Node指的是。


2
投票

这是完全没有必要设置但是下一个和以前的指针null日,作为节点由deleteKey方法返回,我同意你的看法:它会更好,将其设置为null并防止任何内存泄漏。这段代码的另一个问题是,如果该列表是空的,first会为空,while表达式会抛出NPE。


0
投票

您不需要设置下一个和以前的零电流为节点从列表中删除。

记住要遍历一个双向链表的唯一方法是开始在第一或头节点和继续,直到所需的节点或最后一个/尾节点。如果你想删除一个节点,你只是链接这是以前到它的下一个节点,反之亦然。

话虽这么说,这是没有错的设置被删除节点的下一个和以前为空,因为这会阻止您遍历通过该节点的参考名单。

© www.soinside.com 2019 - 2024. All rights reserved.