leetcode 876. 連結串列的中間結點(快慢指標法)

海米傻傻發表於2024-06-05

題目描述

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

給你單連結串列的頭結點 head ,請你找出並返回連結串列的中間結點。

如果有兩個中間結點,則返回第二個中間結點。

示例 1:

示例 2:

思路分析

用兩個指標 slowfast 一起遍歷連結串列。slow 一次走一步,fast 一次走兩步。那麼當 fast 到達連結串列的末尾時,slow 必然位於中間。

程式碼實現

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode middleNode(ListNode head) {
        if(head==null) return null;
        ListNode slow = head, fast = head;
        while(fast!=null && fast.next!=null){
            slow = slow.next;
            fast = fast.next.next;
        }
        return slow;
    }
}

相關文章