题目描述
给定一个头结点为 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
思路分析
快慢指针:定义两个指针,fast和slow,fast指针一次走两步,slow指针一次走一步,当链表结点个数为奇数个时,fast走到尾,slow正好走到中间,当链表结点为偶数个,fast为空时,slow正好走到中间第二个
代码实现
struct ListNode* middleNode(struct ListNode* head){
struct ListNode* fast=head,*slow=head;
while(fast&&fast->next)
{
fast=fast->next->next;
slow=slow->next;
}
return slow;
}