删除单链表的最后一个节点

问题描述 投票:1回答:4

下面是删除单链表的最后一个节点的功能。我不明白,为什么我们要创建一个临时节点?我尝试在没有临时节点的情况下执行此操作并使用节点本身,但输出不会删除最后一个节点。此外,由于我们使用临时节点,为什么我们返回节点而不是临时节点?我们没有对节点进行任何更改,那么节点如何受到影响?

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;
}
java singly-linked-list
4个回答
1
投票

我不明白为什么我们要创建一个临时节点?

那是因为你在当前的temp变量中存储了当前的迭代节点。

我尝试在没有临时节点的情况下执行此操作并使用节点本身,但输出不会删除最后一个节点。

代码需要提供任何反馈。

另外,既然我们正在使用临时节点,为什么我们要返回节点而不是临时节点?

因为您正在返回对列表头部的引用,所以它不再具有最后一个元素。

我们没有对节点进行任何更改,因此节点如何受到影响?

你在这里删除最后一个节点temp.next = null;

希望它能让你有点清楚。


1
投票

通常使用temp节点的原因是node是列表的头部/起点,这是我们列表的唯一表示(根据链表的定义)。因此,我们不想改变头部(或列表的表示),这就是从方法返回node的原因 - 这意味着我们在执行删除后返回更新的列表。


1
投票

首先,你需要将其切换到这样的条件

if (node.next == null || node == null) to 
if (node == null || node.next == null) 

这可能会导致空指针异常。 next ..我认为temp需要在赋值之前保存数据,以便真正的引用不会丢失数据。


0
投票

要将链表导航到其最后一个节点,您需要一个指针(光标)指向您认为最后一个待测试this.next == null的节点。

没有临时节点(a.k.a游标或指针),您如何与列表中的任何节点进行交互?

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