问题描述:
给定一个带有头结点
head
的
非空
单链表,返回链表的
中间结点
。
如果有两个中间结点,则返回第二个
中间结点。
示例 1:
输入:[1,2,3,4,5]
输出:此列表中的结点 3 (序列化形式:[3,4,5])
返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。
注意,我们返回了一个 ListNode 类型的对象 ans,这样:
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = NULL.
提示:
- 给定链表的结点数介于
1
和100
之间。
问题分析:
(方法 1)可以把链表转换成数组,然后求解。
(方法 2)设置两个指针,一个快的一个慢的,慢的每次走一步,快的每次走两步。当快的指针到达尾部时,慢的指针就是要求的值了,返回即可。
Python3实现:
# Definition for singly-linked list.
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def middleNode(self, head):
slow = fast = head # 初始化两个指针
while fast and fast.next:
slow = slow.next # 走一步
fast = fast.next.next # 走两步
return slow
欢迎指正哦。