题目:
给定一个头结点为 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
解法:
快慢指针,快指针走两步,慢指针走一步。注意边界条件:快指针指向最后一个元素时,就应该结束循环。
func middleNode(head *ListNode) *ListNode {
mid := head
node := head
for node != nil && node.Next != nil {
// fast走两步或者一步
node = node.Next
if node != nil {
node = node.Next
}
// slow走一步
mid = mid.Next
}
return mid
}