题目描述:
给定一个头节点为 head 的非空单链表,返回链表的中间节点。
如果有两个中间节点,则返回第二个中间节点。
示例:
输入:[1,2,3,4,5]
输出:此列表中的节点 3
思路分析:
要找到链表的中间节点,可以定义两个指针,一个是慢指针slow,另一个是快指针fast。初始,慢指针slow和快指针fast都指向链表的头节点。然后,快指针fast每次向前移动两步,慢指针slow每次向前移动一步,当快指针fast不能继续向前移动时,慢指针slow所指的节点就是中间节点。
对于节点个数为奇数的链表来说,其中间节点只有一个;而对于节点个数为偶数的链表来说,其中间节点有两个。
接着,我们就通过动画来看下如何通过快慢指针找到链表的中间节点。
1.当快指针fast向前移动的条件是:fast.next!=null && fast.next.next != null时:
对于节点个数为奇数的链表来说,动画演示如下,此时链表的中间节点是节点3。
对于节点个数为偶数的链表来说,动画演示如下,此时链表的中间节点是节点2,即在2和3这两个中间节点中,找到是第一个中间节点。