876. 链表的中间结点

876. 链表的中间结点

思路

快慢指针。

每当慢指针 slow 前进一步,快指针 fast 就前进两步,这样,当 fast 走到链表末尾时,slow 就指向了链表中点。

需要注意的是,如果链表长度为偶数,也就是说中点有两个的时候,当前这个解法返回的节点是靠后的那个节点。

代码

Python

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def middleNode(self, head: Optional[ListNode]) -> Optional[ListNode]:
        # 快慢指针初始化指向 head 
        slow = head
        fast = head
        # 快指针走到末尾时停止
        while fast is not None and fast.next is not None:
            # 慢指针走一步,快指针走两步
            slow = slow.next
            fast = fast.next.next
        # 慢指针指向中点
        return slow
posted @ 2026-07-10 18:15  wyzsgy  阅读(3)  评论(0)    收藏  举报