题目表述
代码实现
/*
给定一个头结点为 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
思路:利用两个指针,slow和fast,slow指针一次走一步,fast指针一次走两步
*/
struct ListNode
{
int val;
struct ListNode *next;
};
struct ListNode* middleNode(struct ListNode* head)
{
struct ListNode *slow, *fast;
slow = fast = head;
// 结束条件:fast和fast->next只要有一个为空
while (fast && fast->next)
{
// slow移动一步,fast移动两步
slow = slow->next;
fast = fast->next->next;
}
return slow;
}