单链表
-
核心思想: 用数组模拟链表(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; }