1 条题解

  • 0
    @ 2023-12-23 0:25:05

    此题要求模拟链表结构。 但是因为允许使用C本身的链表STL类,那么拿过来用是最便捷快速的办法,不要自己去实现。 (正因如此,比赛也不可能出这种题)

    由于不考察性能(数据量很小),所有STL容器类都可以实现此题要求,熟悉哪种用哪种。

    对于STL容器,需要熟悉iterator迭代器来定位,这东西听起来挺 吓人,翻译成游标是不是就亲切多了?

    因为支持游标,可以很方便定位在需要的位置,进行增删改操作。

    注意find是std下的全局方法。不是容器方法。

    vector:内部实现为动态数组 deque:双头链表,内部为链表 list:列表,除了内部为链表,它和vector基本一样 (不知为何,其游标不支持不等比较 cursor>list.end())

    #include <bits/stdc++.h>
    using namespace std;
    #define find_x_on_vec find(vec.begin(),vec.end(),x) //纯粹为了卷面简洁
    int main(){
        vector<int> vec = {1};
        int n,type,x,y;
        cin>>n;
        auto p=vec.begin(); //迭代器,也可以理解为指针
        for (int i=0;i<n;i++){
            cin>>type; //出乎意料type居然不是C家的保留字
            if (type==1){
                cin>>x>>y;
                p=find_x_on_vec;
                vec.insert(++p,y);
            }else if (type==2){
                cin>>x;
                p=find_x_on_vec;
                //如果x不是最后一个元素?输出后续元素:输出0;
                //考虑到有可能根本找不到x(此时游标在
    //vec.end()上,vec.end()不是指向最后一个元素,而
    //是最后一个元素之后),比较最好用<号而不是==号
                cout<<(p<(vec.end()-1)?*(++p):0)<<endl;
            }else{
                cin>>x;
                p=find_x_on_vec;
                if (p<vec.end()-1) vec.erase(++p);
            }
        }
        return 0;
    }
    
    • 1

    信息

    ID
    7485
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    57
    已通过
    9
    上传者