下面是删除单链表的最后一个节点的功能。我不明白,为什么我们要创建一个临时节点?我尝试在没有临时节点的情况下执行此操作并使用节点本身,但输出不会删除最后一个节点。此外,由于我们使用临时节点,为什么我们返回节点而不是临时节点?我们没有对节点进行任何更改,那么节点如何受到影响?
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;
}
我不明白为什么我们要创建一个临时节点?
那是因为你在当前的temp
变量中存储了当前的迭代节点。
我尝试在没有临时节点的情况下执行此操作并使用节点本身,但输出不会删除最后一个节点。
代码需要提供任何反馈。
另外,既然我们正在使用临时节点,为什么我们要返回节点而不是临时节点?
因为您正在返回对列表头部的引用,所以它不再具有最后一个元素。
我们没有对节点进行任何更改,因此节点如何受到影响?
你在这里删除最后一个节点temp.next = null;
希望它能让你有点清楚。
通常使用temp
节点的原因是node
是列表的头部/起点,这是我们列表的唯一表示(根据链表的定义)。因此,我们不想改变头部(或列表的表示),这就是从方法返回node
的原因 - 这意味着我们在执行删除后返回更新的列表。
首先,你需要将其切换到这样的条件
if (node.next == null || node == null) to
if (node == null || node.next == null)
这可能会导致空指针异常。 next ..我认为temp需要在赋值之前保存数据,以便真正的引用不会丢失数据。
要将链表导航到其最后一个节点,您需要一个指针(光标)指向您认为最后一个待测试this.next == null
的节点。
没有临时节点(a.k.a游标或指针),您如何与列表中的任何节点进行交互?