【单链表】数组模拟单链表模板_插入

【单链表】数组模拟单链表模板_链表操作_02

 

单链表遍历:

for(int i=head;i!=-1;i=ne[i])cout<<e[i];
  • 1.

在删除节点的时候,需要判断这个节点是否是头结点,删除头结点,即把head指向ne[head]

head=ne[head];
  • 1.

 

【单链表】数组模拟单链表模板_插入_03

#include<iostream>
using namespace std;
const int N=100010;
int idx,head,n[N],ne[N];
int a;
void init(){
    head=-1;
    idx=0;
}
void add_head(int x){
    n[idx]=x;
    ne[idx]=head;
    head=idx;
    idx++;
}
void add(int k,int x){
    n[idx]=x;
    ne[idx]=ne[k];
    ne[k]=idx;
    idx++;
}
void remove(int k){
    ne[k]=ne[ne[k]];
}
int main(){
    init();
    cin>>a;
    while(a--){
      char op;
      int k,x;
      cin>>op;
      if(op=='D'){
          cin>>k;
          if(!k)head=ne[head];
          remove(k-1);
      }else if(op=='H'){
          cin>>x;
          add_head(x);
      }else if(op=='I'){
          int k,x;
          cin>>k>>x;
          add(k-1,x);
      }
    }
    for(int i=head;i!=-1;i=ne[i])cout<<n[i]<<" ";
    return 0;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.