一、题目描述
二、题目解析
该题目比较简单,可以使用快慢指针的方法解决。我们定义两个指针,分别取名叫作fast和slow,起始位置都位于head,我们让fast每次走两步,slow每次走一步。我们先看第一种情况:节点个数为奇数个。
我们让fast每次走两步,slow每次走一步。我们可以得到如下图所示的结果:
slow刚好位于中间节点,3的位置。
接下来我们看第二种情况:节点个数为偶数个。
当fast走到空时,slow刚好位于第二个中间节点,那么我们将slow返回即可。因为题目要求,有两个中间节点时,返回第二个即可。
三、题目代码
struct ListNode* middleNode(struct ListNode* head)
{
struct ListNode*slow=head;
struct ListNode*fast=head;
while(fast&&fast->next)
{
slow=slow->next;
fast=fast->next->next;
}
return slow;
}