题目
给你单链表的头结点
head,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。
题解
设置快慢指针slow和fast,slow每次走一步,fast每次走两步,当fast走完时,slow刚好指到链表中间结点。从下图中可以看出,当链表结点个数为奇数时,fast指向链表尾结点,slow刚好指向中间节点;当链表结点个数为偶数时,fast指向NULL,slow刚好指向第二个中间结点。所以循环的条件为 while(fast && fast->next),最后返回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; }


















![[QT编程系列-7]:C++图形用户界面编程,QT框架快速入门培训 - 3- QT窗体设计 - 自定义工具栏、状态栏、快捷键、图标](https://img-blog.csdnimg.cn/d4af4717dfda4625ad92ec057d0d0ebd.png)
