思路
快慢指针法
代码实现
//Definition for singly-linked list.
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* middleNode(ListNode* head) {
ListNode * slow, * fast;
slow = fast = head;
while(fast && fast->next){
slow = slow->next;
fast = fast->next->next;
}
//快慢指针法补充:结束时fast不为空则len为奇数;fast为空则len为偶数
//结束时: len为奇数则slow位于(len+1)/2;len为偶数则slow位于len/2+1
return slow;
}
};
执行结果
执行用时 : 8 ms, 在Middle of the Linked List的C++提交中击败了85.92% 的用户
内存消耗 : 8.5 MB, 在Middle of the Linked List的C++提交中击败了18.20% 的用户