976.链表的中间结点

75 阅读1分钟

题目:
给定一个头结点为 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
}