思路
如果 单向链表中的节点总数为偶数,则返回第二个中间节点。
Input: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> null ,返回 4
Input: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> null ,返回 4
使用快慢两个指针,遍历单链表。 快指针步长是慢指针的2倍, 快指针遍历结束时, 慢指针所指的数据就是中间节点。
代码如下
In [1]: class Node:
...: def __init__(self, value, next=None):
...: self.value = value
...: self.next = next
...: def __repr__(self):
...: return f'{self.value}'
...:
In [2]: def get_middle(node):
...: slow, fast = node, node
...: while fast and fast.next:
...: slow = slow.next
...: fast = fast.next.next
...: return slow
...:
In [3]: node6 = Node(6)
...: node5 = Node(5, node6)
...: node4 = Node(4, node5)
...: node3 = Node(3, node4)
...: node2 = Node(2, node3)
...: node1 = Node(1, node2)
In [4]: get_middle(node1)
Out[4]: 4
In [5]: get_middle(node2)
Out[5]: 4
In [6]: get_middle(node4)
Out[6]: 5