文章

16

粉丝

0

获赞

38

访问

939

头像
击鼓传花 题解:
P1018 贵州大学机试题
发布于2026年3月25日 00:21
阅读数 65

#include <bits/stdc++.h>
using namespace std;
struct Node{
	int val;
	Node* next = nullptr;
};

int func(Node* head)
{
	Node* ptr_f = head;
	Node* ptr_s = head;
	while(head->val != 1)
	{
		ptr_f = ptr_f->next->next->next; // 快的走三步
		ptr_s = ptr_s->next->next; // 慢的走两步
		//cout << ptr_f->val << endl;
		// 删除操作
		ptr_s->next = ptr_f->next;
		delete ptr_f;
		ptr_f = ptr_s;
		head->val--;
	}
	// 最后 ptr_f所在位置为最后一个节点
	return ptr_f->val;
}

int main()
{
	Node* head = new Node();
	head->val = 0;
	Node* r = head;
	int n;
	cin >> n;
	for(int i = 1;i <= n;++i)
	{
		r->next = new Node();
		r->next->val = i;
		head->val++;
		r = r->next;
	}
	r->next = head->next; // 循环链表

	cout << func(head) << endl;

	return 0;
}

快慢指针

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发