以下是删除单链列表的最后一个节点的功能。 我不明白,我们为什么要创建一个临时节点?我尝试在没有临时节点的情况下执行此操作,并使用了节点本身,但输出不会删除最后一个节点。 另外,由于我们使用的是临时节点,为什么我们返回该节点而不是临时节点?我们没有对节点进行任何更改,那么节点如何受到影响?
public Node deleteLastNode(Node node)
{
if (node.next == null || node == null)
return null;
Node temp = node;
while (temp.next.next != null)
{
temp = temp.next;
}
temp.next = null;
return node;
}
答案 0 :(得分:1)
通常使用temp
节点的原因是node
是列表的开头/开头,这是我们拥有的列表的唯一表示形式(根据链接列表的定义) 。因此,我们不想更改标题(或列表的表示形式),这就是从方法返回node
的原因-这意味着在执行删除操作后,我们将返回更新的列表。
答案 1 :(得分:1)
首先,您需要将其切换到这样的条件
if (node.next == null || node == null) to
if (node == null || node.next == null)
这可能会导致空指针异常。 接下来。我认为在将null分配给真实引用之前,临时数据需要保留数据,以免丢失数据。
答案 2 :(得分:1)
我不明白为什么要创建一个临时节点?
那是因为您将当前迭代节点存储在该temp
变量中。
我尝试在不使用临时节点的情况下执行此操作,并使用了节点本身,但是输出不会删除最后一个节点。
需要提供任何反馈的代码。
而且,由于我们使用的是临时节点,为什么我们返回节点而不是临时节点?
因为您要返回对列表开头的引用,所以它不再具有最后一个元素。
我们没有对节点进行任何更改,因此节点如何受到影响?
您要在此处删除最后一个节点
temp.next = null;
希望它使您的事情变得清晰一些。
答案 3 :(得分:0)
要将链接列表导航到其最后一个节点,您需要一个指针(光标),该指针指向您假设最后一个等待测试this.next == null
的节点。
没有临时节点(也就是光标或指针),您如何与列表中的任何节点进行交互?