```
#include <bits/stdc++.h>
using namespace std;
struct LinkList {
int id;
int direction;
string name;
LinkList* leftPointer;
LinkList* rightPointer;
};
int main() {
int n, m;
cin >> n >> m;
LinkList* firstNode = nullptr;
LinkList* lastNode = nullptr;
int directionList[100005] = {0};
for (int i = 0; i < n; i++) {
LinkList* newNode = new LinkList;
newNode->id = i;
cin >> newNode->direction >> newNode->name;
directionList[i] = newNode->direction;
if (firstNode == nullptr) {
firstNode = newNode;
lastNode = newNode;
newNode->leftPointer = newNode;
newNode->rightPointer = newNode;
} else {
newNode->leftPointer = lastNode;
newNode->rightPointer = firstNode;
lastNode->rightPointer = newNode;
firstNode->leftPointer = newNode;
lastNode = newNode;
}
}
LinkList* glassGuy = firstNode;
int hand;
int num;
int rightMove = 0;
for (int i = 0; i < m; i++) {
cin >> hand >> num;
if (directionList[rightMove] == hand) /* leftward count num */ {
/*
for (int j = 0; j < num % n; j++) {
glassGuy = glassGuy -> leftPointer;
}
*/
rightMove -= num;
rightMove += n;
rightMove %= n;
} else /* rightward count num */ {
/*
for (int j = 0; j < num % n; j++) {
glassGuy = glassGuy -> rightPointer;
}
*/
rightMove += num;
rightMove %= n;
}
}
if (rightMove > 0) {
while (rightMove--) {
glassGuy = glassGuy -> rightPointer;
}
} else {
while (rightMove++) {
glassGuy = glassGuy -> leftPointer;
}
}
cout << glassGuy->name;
/*
LinkList* current = firstNode; // free the memory
do {
LinkList* next = current->rightPointer;
delete current;
current = next;
} while (current != firstNode);
*/
return 0;
}
```
已经自我完善,谢谢,虽然这样做好像和链表没啥关系了,不过就这样吧
by Kuroibuta @ 2024-01-17 19:44:31