思路:使用两个指针变量,刚开始都位于链表的第 1 个结点,慢指针一次只走 1 步,快指针一次只走 2 步,一个在前,一个在后,同时走。这样当快指针走完的时候,慢指针就来到了链表的中间位置。
代码如下:
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* middleNode(struct ListNode* head){
struct ListNode *fast = head;
struct ListNode *slow = head;
while( (fast) && (fast->next)){
slow = slow -> next;
fast = fast -> next -> next;
}
return slow;
}