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

Java 删除单个链接列表的最后一个节点,java,singly-linked-list,Java,Singly Linked List,下面是删除单链表的最后一个节点的函数。 我不明白,我们为什么要创建临时节点?我尝试在没有临时节点的情况下执行此操作,并使用了节点本身,但输出没有删除最后一个节点。 另外,既然我们使用的是temp节点,为什么我们返回的是节点而不是temp?我们没有对节点进行任何更改,那么节点会受到什么影响 public Node deleteLastNode(Node node) { if (node.next == null || node == null) return null;

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

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
节点的原因是
节点
是列表的开头/开头,这是列表的唯一表示形式(根据链表的定义)。因此,我们不希望更改列表的标题(或列表的表示形式),这就是从方法返回
节点的原因-这意味着我们在执行删除后返回更新的列表。

首先,您需要将其切换到类似这样的条件

if (node.next == null || node == null) to 
if (node == null || node.next == null) 
这可能会导致空指针异常。 接下来..我认为temp需要在赋值null之前保存数据,这样真正的引用就不会丢失数据

我不明白为什么要创建临时节点

这是因为您正在该
temp
变量中存储当前迭代节点

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

提供任何反馈所需的代码

另外,既然我们使用的是temp节点,为什么我们返回的是Node而不是temp

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

我们没有对节点进行任何更改,那么节点是如何受到影响的呢

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.next=null


希望它能让您明白一点。

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


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

如果没有临时节点,您将如何遍历列表?对于遍历链接列表,为什么不能使用节点本身。例如,如果我将while循环写为while(node.next.next!=null),并且根本不创建临时变量,该怎么办。为什么不起作用?@Bobert,因为在链表中迭代会丢失列表的头部,为什么我们不能使用节点本身。例如,如果我将while循环写为while(node.next.next!=null),并且根本不创建临时变量,该怎么办。为什么不起作用?您仍然会遍历列表,对吗?