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