链表+字符串,首先将字符串处理成一个数组,再模拟构造链表,按照操作进行增加和删除节点操作。

#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;
}