链表+字符串,首先将字符串处理成一个数组,再模拟构造链表,按照操作进行增加和删除节点操作。
#include <bits/stdc++.h> using namespace std; const int N = 10000010; int idx, head, n[N], ne[N]; vector<int> nums; unordered_map<int, int> _map; // value - idx int new_value, old_value; inline int ctoi(char c) { return c - '0'; } inline int _stoi(string s) { vector<int> tmp; int res = 0; for (int i = 0; i < s.size(); i++) { int single = ctoi(s[i]); if (single >= 0 && single <= 9) { tmp.push_back(single); } } for (int i = tmp.size() - 1; i >= 0; i--) { res += tmp[i] * pow(10, tmp.size() - i - 1); } return res; } inline void string_to_nums(string s) { string tmp = ""; for (int i = 0; i < s.size(); i++) { if (s[i] == ' ') { int num = _stoi(tmp); nums.push_back(num); tmp = ""; } else { tmp += s[i]; } } } void append_to_x(int value, int x) { int index = _map[x]; n[idx] = value; ne[idx] = ne[index]; ne[index] = idx; _map[value] = idx++; } void init() { idx = 1; head = -1; // nullptr } int main() { init(); string s; getline(cin ,s); s += " "; string_to_nums(s); // head int head_value = nums[1]; head = idx; _map[head_value] = idx; n[idx] = head_value; ne[idx++] = -1; // next node is nullptr int m = 0; for (int i = 2; i < nums.size() - 1; i++, m++) { if (m & 1) { old_value = nums[i]; /// append_to_x(new_value, old_value); } else { new_value = nums[i]; } } int delete_value = nums[nums.size() - 1]; if (delete_value == n[head]) { head = ne[head]; } else { for (int i = head; i != -1; i = ne[i]) { if (n[ne[i]] == delete_value) { ne[i] = ne[ne[i]]; break; } } } for (int i = head; i != -1; i = ne[i]) { cout << n[i] << " "; } cout << endl; return 0; }