链表中间节点
给一个链表 1 -> 2-> 3-> 4-> 5
返回中间节点3
如果是偶数个数, 中间节点有2个, 返回第2个
思路:
两个指针,slow, fast
slow指针每次走一步, fast指针每次走两步, fast走到结尾时, slow指针正好指到中间节点。
class Node:
def __init__(self, x):
self.val = x
self.next = None
def find_mid(phead):
if phead == None:
return
elif phead.next == None:
return phead
else:
slow = phead
fast = phead
while fast != None and fast.next != None:
slow = slow.next
fast = fast.next.next
return slow
Test code:
node1 = Node(1)
node2 = Node(2)
node3 = Node(3)
node4 = Node(4)
node5 = Node(5)
node6 = Node(6)
node1.next = node2
node2.next = node3
node3.next = node4
node4.next = node5
node5.next = node6
new = find_mid(node1)
new.val
3