当删除链表中的最后一个节点时,我将 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
删除链表中的最后一个节点时,我将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