链表+字符串,首先将字符串处理成一个数组,再模拟构造链表,按照操作进行增加和删除节点操作。
#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;
} 
京公网安备 11010502036488号