返回中间节点的思想是我们在后边解题中最常用的一种解题方法之一,利用快慢指针可以很好地解决问题,同时还可用用c++中的vector模型转化数组思想解决。
解题思路:这里有两种最常规的方法,一种是对其用快慢指针,快的速度刚好是慢的速度的两倍就行,一种是统计总个数,最后除以二。
利用链表:时间复杂度(on)空间复杂度(o1)
class Solution { public: ListNode* middleNode(ListNode* head) { ListNode* slow = head; ListNode* fast = head; while( fast && fast->next){ slow = slow->next; fast = fast->next->next; } return slow; } };
利用数组:把链表中的每个节点放到数组中,统计出来数组中元素的个数除以二就行。
class Solution { public: ListNode* middleNode(ListNode* head) { vector<ListNode*>a = {head}; while(a.back()->next != NULL){ a.push_back(a.back()->next); } return a[(a.size()/2)]; } };