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
浙公网安备 33010602011771号