单链表
-
核心思想: 用数组模拟链表(new节点非常慢 用数组模拟快)
-
e[N] 表示节点value ne[N]表示next指针指向 (空节点为-1)
-
#include<iostream>using namespace std;const int N=100010;//head头结点的指针//e[N] 表示节点value ne[N]表示next指针指向 //idx为当前操作的节点下标int head, e[N],ne[N],idx;//初始化void init(){head=-1;idx=0;}//向头结点后面添加一个节点void add_to_head(int x) {e[idx] = x;ne[idx] = head; //head只是一个指针 不是节点(没有value) 插入节点 让新节点作为真正的头节点 指向-1(空)head = idx;idx++;}void add(int k,int x){e[idx] = x;ne[idx] = ne[k];ne[k] =idx;idx++;} void remove(int k){ne[k] = ne[ne[k]]; //直接连下下个}int main(){int m;cin>>m;char c;init();while(m--){int k,x;cin>>c;if(c=='H') {cin>>x;add_to_head(x);}else if(c=='D'){cin>>k;//如果只有头节点 则删除头节点(第一个节点)if(!k) head=ne[head];remove(k-1);}else{cin>>k>>x;add(k-1,x);}}for(int i = head;i!=-1;i=ne[i]) cout<<e[i]<<' ';cout<<endl;return 0;}