https://leetcode.com/problems/middle-of-the-linked-list/
1. Use fast and slow pointer:
//8 ms 6.8 MB/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/class Solution {public:ListNode* middleNode(ListNode* head) {ListNode* runner = head;ListNode* chaser = head;while(runner && runner->next){runner = runner->next->next;chaser = chaser->next;}return chaser;//1. runner has next next// runner go// chaser go//2. runner has next, has no next next// return chaser->next;//3. runner has no next// return chaser;}};
Time Complexity: O(N)
Space Complexity: O(1)
