lsmCC 发表于 2024-2-5 16:01:53

修改代码实现以下要求

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 5;
int q, x, y, p, mark;
list<int> l;
list<int>::iterator it, tempit;

void solve()
{
    cin >> q;
    while (q--)
    {
      cin >> p;
      if (p == 1)
      {
            cin >> x >> y;
            if (y != 0)
            {
                if (l.empty())
                {
                  l.push_front(y);
                  it = l.begin();
                }
                if (it == l.end())
                {
                  l.push_back(x);
                  it = --l.end();
                }
                else
                {
                  tempit = it;
                  tempit++;
                  it = l.insert(tempit, x);
                }
            }
            else
            {
                l.push_front(x);
                it = l.begin();
            }
      }
      else
      {
            cin >> x;
            if (mark == 1)
                continue;
            mark = 1;
            l.erase(it);
      }
    }
    cout << l.size() << endl;
    for (tempit = l.begin(); tempit != l.end(); tempit++)
    {
      cout << *tempit << " ";
    }
}

signed main()
{
    int t;
    t = 1;
    while (t--)
    {
      solve();
    }
}

题目描述 $x$
小红拿到了一个数组,初始数组为空,她希望你实现以下两种操作:
1. 翰入 $1 x y$ ,将 $x$ 插入在元素 $y$ 的右边。保证此时数组中没有元素等于 $x$ ,且数组中存在一个 $y$ 。特殊的,如果将 $x$ 插入在数组的最左边,则 $y=0$
2. 输入 $2 x$ ,将元素 $x$ 删除。

请你在所有操作后输出整个数组。
https://ac.nowcoder.com/acm/contest/74362/D
程序发生了段错误,应该怎么修改

FishC 发表于 2024-2-5 16:02:12

#include <iostream>
#include <list>

using namespace std;

#define ll long long

list<ll> l;
list<ll>::iterator it, tempit;

void solve()
{
    ll q, x, y, p;
    cin >> q;
    while (q--)
    {
      cin >> p;
      if (p == 1)
      {
            cin >> x >> y;
            if (y != 0)
            {
                if (l.empty())
                {
                  l.push_front(y);
                  it = l.begin();
                }
                if (it == l.end())
                {
                  l.push_back(x);
                  it = --l.end();
                }
                else
                {
                  tempit = it;
                  tempit++;
                  it = l.insert(tempit, x);
                }
            }
            else
            {
                l.push_front(x);
                it = l.begin();
            }
      }
      else
      {
            cin >> x;
            if (it != l.end())
            {
                if (*it == x)
                {
                  l.erase(it);
                  it = l.end();
                }
            }
      }
    }

    for (auto num : l)
    {
      cout << num << " ";
    }
    cout << endl;
}

int main()
{
    solve();

    return 0;
}

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 修改代码实现以下要求