这道题非常经典,其中快慢指针的思想可以覆盖到很多有链表的题目,值得深刻钻研,我们来看看这道题的原题是什么样的:
也就是说,我们需要找到一个链表当中的中间元素。如果linked list的nodes个数为偶数,则返回中间的那个node,如果linked list的nodes为奇数,则返回第二个中间节点(因为中间节点有两个的缘故)。因此我们需要分两种情况进行分类讨论,如下:
因此我们有代码:
# 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: ListNode) -> ListNode: slow = fast = head while fast and fast.next: slow = slow.next fast = fast.next.next return slow
得解!记得做同样类型的题目,leetcode109 有序列表转化为二叉树哦!