我正在阅读删除单链表最后一个元素的算法。 假设我有一个名为 ListNode 的链表对象:
public class ListNode {
private int data;
private ListNode next;
public ListNode(int data) {
this.data = data;
}
public int getData() {
return this.data;
}
public void setData(int data) {
this.data = data;
}
public ListNode getNext() {
return this.next;
}
public void setNext(ListNode next) {
this.next = next;
}
}
我发现删除链表最后一个节点的方法是:
public ListNode deleteAtTail(ListNode head) {
if (head == null || head.next == null) return null;
ListNode node = head;
while(node.next.next != null) {
node = node.next;
}
node.next = null;
return head;
}
我很困惑这段代码是如何工作的,因为一切都是通过“节点”进行的。但是,当返回 head 时,最后一个节点被删除。 因此,我想知道它是如何工作的,是否与Java中的“按值传递”有关?
最佳答案
您遍历列表的 node
直到 node.next.next
为空。
此时,node
指的是倒数第二个节点,node.next
指的是最后一个节点。将 node.next
设置为 null 会从列表中删除最后一个节点,因为列表中的任何节点都不再引用它。
关于java - 如何从 Java 中的单链表中删除尾部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36396132/