二AcW826. 单链表

image
` #include
using namespace std;
const int N=100010;

//head头结点下标
//e[i]值
//ne[i]下一个位置的地址
//idx当前已经用到了哪个点
int head, e[N],ne[N],idx;
void init(){
    head=-1;
    idx=0; 
}
void add_to_head(int x)//插到head
{
    e[idx]=x;
    ne[idx]=head;//以前head指针是指1,现在idx指针指1
    head=idx++;//现在head指
    // idx++;
}
void add(int k,int x)//插到下标为k后面
{
    e[idx]=x;
ne[idx]=ne[k];//idx现在要指的
ne[k]=idx++;//k现在要指的
// idx++;

}
void remove(int k)//删k的下一个
{
    ne[k]=ne[ne[k]];
}

int main()
{
    int m;
    cin>>m;

    init();
    while(m--)
    {
        int x,k;
        char op;
        
        cin>>op;
        if(op=='H')
        {
            cin>>x;
            add_to_head(x);
        }
        else if(op=='D')
        {
            cin>>k;
            if(k==0)head=ne[head];//2空就k指向下一个]不加这一句下个k-1就可能-1了
            remove(k-1);//1一号点是第二个插入的点,第k个插入的点下标就是k-1
        }
       if(op=='I')
        // else
        {
            cin>>k>>x;
            add(k-1,x);//k-1
        }
    }
for(int i=head;i!=-1;i=ne[i])cout<<e[i]<<' ';
cout<<endl;
return 0;
}`

image

posted @ 2023-11-05 17:06  E/Y/E  阅读(11)  评论(0)    收藏  举报