LeetCode 876. 链表的中间结点 快慢指针法 题解 C/C++

快慢指针法:用两个指针 slow 与 fast 一起遍历链表。slow 一次走一步,fast 一次走两步。当 fast 到达链表的末尾时,slow 必然位于中间。

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) {
		if(head->next==nullptr)return head;
		ListNode *fir = head;
		ListNode *sec = head;
		while(fir!=nullptr&&fir->next!=nullptr) {
			fir = fir->next;
			fir = fir->next;
			sec= sec->next;
		}
		return sec;
	}

};



你可能感兴趣的:(LeetCode,链表,快慢指针法,c++)