

这题需要用到快慢指针的思想,快指针叫fast,慢指针是slow,快指针每次往后移两个节点,slow只移动一个节点,这样子fast的速度是slow的两遍,当fast遍历完链表,slow才遍历一半,正好就在中间。
代码:

cpp
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode LSTNode;
struct ListNode* middleNode(struct ListNode* head) {
LSTNode* slow,*fast;//定义两个指针
fast=slow=head;//初始化指针
while(fast&&fast->next)//fast走的快,它不能为空,并且它的next也不行
{
slow=slow->next;//slow每次往后移动一个节点
fast=fast->next->next;//fast每次往后移动两个节点
}
return slow;//返回slow
}