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

时间:2019-01-14 17:28:44

标签: java singly-linked-list

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

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;
}

4 个答案:

答案 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的节点。

没有临时节点(也就是光标或指针),您如何与列表中的任何节点进行交互?