java - 如何从 Java 中的单链表中删除尾部?

标签 java algorithm singly-linked-list

我正在阅读删除单链表最后一个元素的算法。 假设我有一个名为 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/

相关文章:

java - 通过接口(interface)导入 map key

java - 为 JTextField 添加标签

python - 无法在均衡群体财富的程序中找到错误 (UVA 10137, "The Trip")

c++ - 如何解决负数情况下程序以相同方式工作的问题?

algorithm - Scala 中高效的最近邻搜索

java - 反向打印链表的元素

java - HashMap : One Key, 多个值

java - Zen desk Api 名称用户 : Name: is too short (minimum one character) 的问题

java - 在java中创建单链表后如何返回到它的头部?

C 链表使用指针removeLast