算法中常见的一些写法范式
查找链表中间节点
多了一个prev节点, prev.next设置为none, 可以使得链表正确的分割, 中间链表的开头就是slow了.
def split(self, head):
fast = slow = prev = head
while fast and fast.next:
prev = slow
slow = slow.next
fast = fast.next.next
prev.next = None
return head, slow
一些简单数列的对比
# 1 -> 10, 这时候slow刚好是5, 但是感觉其实应该从6开始
# 1 -> 9, 这时候slow也刚好是5, 从5开始没问题, 从6开始也行
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
slow: 1 -> 2 -> 3 -> 4 -> 5
fast: 1 -> 3 -> 5 -> 7 -> 9
# 1 -> 2, 这时候slow刚好是2, 作为第二个节点开始倒也没问题
1, 2
slow: 1 -> 2
fast: 1 -> none