当删除链表中的最后一个节点时,我将 temp 分配给 null,但它仍然存在并且没有被删除。 Java

When deleting the last node in linked-list, i am assigning temp to null, but it's still there and not deleted. Java

删除链表中的最后一个节点时,我将temp 分配给null,但它仍然存在并且没有被删除。 (Java)

public void deleteFromBack() {

        if (!isEmpty()) {
            Node temp = first;
            while (temp.next != null) {
                temp = temp.next;
            }
            temp=null;

        }
    } 
Output:
5
9
6
7
After deleting last node: 
5
9
6
7

你设置为null的是temp,这是一个局部变量;一旦声明它的块离开,它就会超出范围,因此将其设置为 null 无效。

您要做的是将该节点的 next 元素设置为空,这样尾部就被截断了。

temp.next = null;

但是,由于您一直循环直到找到 next 已设置为 null 的节点,因此您必须先记住一个节点。此外,您需要为列表中的最后一个元素指定一个特例。

您没有删除您在 OP 中编写的代码段中的节点。您只是将 null 分配给 temp。

    if (!isEmpty()) {
        Node temp = first;
        Node previousNode = null;
        while (temp.next != null) {
            previousNode = temp;
            temp = temp.next;
        }
        previousNode.next = null;
    }

要从列表中删除节点,您需要将持有最后一个节点的引用的节点的值设为空。

原因是temp变量只是另一个引用变量,它指向链表的最后一个节点以及倒数第二个节点。

例如:-

SecondLastNode.next---\
                       \
                        ------>LastNodeOflinkedList  
                       /
temp------------------/

在您的方案中,您仅将 null 分配给 temp,而 SecondLastNode.next 仍指向最后一个节点。

分辨率:-

null 分配给 SecondLastNode.next