链表的基本操作:
(1)插入一个数:在最左边插入,在最右边插入
(2)删除一个数:将第k个插入的数删除
(3)在第k个插入的数左边插入一个数
(4)在第k个数右边插入一个数
题目:

代码:
1 #include <iostream> 2 3 using namespace std; 4 const int N=100010; 5 int m ; 6 7 int e[N],l[N],r[N],idx; 8 9 //初始化 10 void init() 11 { 12 r[0]=1; 13 l[1]=0; 14 idx =2; 15 16 } 17 //插入:右边 18 19 void insert(int k,int x) 20 { 21 e[idx]=x; 22 23 //改变四条边 24 r[idx]=r[k]; 25 l[idx]=k; 26 l[r[k]]=idx; 27 r[k]=idx; 28 29 idx++; 30 31 } 32 //插入:左边(k) 33 34 /* 35 其实就是 add(l[k],int x); 36 */ 37 38 //删除 39 void remove(int k) 40 { 41 r[l[k]]=r[k]; 42 l[r[k]]=l[k]; 43 } 44 45 int main() 46 { 47 cin>>m; 48 init(); 49 50 while(m--) 51 { 52 string op; 53 cin>>op; 54 55 int k,x; 56 if(op=="L") 57 { 58 cin>>x; 59 insert(0,x); 60 } 61 else if(op=="R") 62 { 63 cin>>x; 64 insert(l[1],x); 65 } 66 else if(op=="D"){ 67 cin>>k; 68 remove(k+1); 69 } 70 else if(op=="IL") 71 { 72 cin>>k>>x; 73 insert(l[k+1],x); 74 } 75 else{ 76 cin>>k>>x; 77 insert(k+1,x); 78 } 79 80 81 } 82 //从左到右遍历双链表 83 for(int i=r[0];i!=1;i=r[i]) cout<<e[i]<<' '; 84 cout<<endl; 85 86 return 0; 87 }
浙公网安备 33010602011771号