寻找链表中点

52 阅读1分钟

如何寻找链表中点呢,以下是一段代码

    public ListNode findMiddle(ListNode head, ListNode tail) {
        ListNode slow = head, fast = head;
        while (fast != tail && fast.next != tail) {
            slow = slow.next;
            fast = fast.next.next;
        }
        return slow;
    }

这段代码是左闭右开的,因为 tail 参数传入的是不包含在链表中的一个节点,所以在查找链表中的中间节点时,需要将 tail 排除在外。

具体来说,在 while 循环中,判断条件为 fast != tail && fast.next != tail,当 fast 指针指向 tail 或者 tail 的前一个节点时,循环就停止了。这意味着 tail 节点不会被处理,也就是说,在这个算法中,tail 节点是不包括在处理范围内的。

因此,这个算法是在链表范围内查找中间节点的,但不包括 tail 节点。因此它是左闭右开的。