题目描述:
给你单链表的头结点 head
,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
示例 1:
输入:head = [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个中间结点,值为 3 。
示例 2:
输入:head = [1,2,3,4,5,6] 输出:[4,5,6] 解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。
解题思路:
这道题最无脑的做法就是遍历一遍,得到长度n,然后再遍历到中间结点。
但也有更好的方法,就是设置两个指针,快慢指针 ,两个指针最开始时都指向头结点,每次慢指针向后移动一步,快指针就向后移动两步,当快指针到最后一个结点时,此时慢指针所指的结点就是中间结点
代码实现:
class Solution(object):
def middleNode(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
fast = head
slow = head
while(fast and fast.next):
slow = slow.next
fast = fast.next.next
return slow