876J. Middle of the Linked List

https://leetcode.com/problems/middle-of-the-linked-list/

这是一道基础题,在很多需要取中位的题里都很有用。

最佳方法


用快慢指针。
运行k次循环后,慢指针指向 1+k th, 快指针指向 1+2k th.
考虑两种情形:
1.odd
odd总共 1+2n 个节点。运行n次循环,快指针.next == null;慢指针在n+1个,是正中间的中位数。
2.even
even 总共2n个几点,运行n次循环,快指针 == null;  慢指针在 n+1个,是下半区第一个。
所以条件为 fast!=null && fast.next!=null

这次竟然和答案一字不差。

class Solution {
    public ListNode middleNode(ListNode head) {
        ListNode slow = head, fast = head;
        while(fast!=null && fast.next!=null){
            slow = slow.next;
            fast = fast.next.next;
        }
        return slow;
    }
}

Last updated

Was this helpful?