双向链表
双向链表数据结构
具有前后指针的链表结构
题目链接
https://www.acwing.com/problem/content/829/
操作分析
注意: 插入操作默认是从k的后面插入
0 和 1 是左右边界,不是具体的值
0是左边界, 1 是右边界
以idx == 1 为结束条件
代码:
#include<iostream>
using namespace std;
const int N = 100010;
int idx,e[N],L[N],R[N];
void init()
{
//0 和 1 是左右边界不是具体的值
L[1] = 0;
R[0] = 1;
idx = 2;
}
void connect(int a,int b)
{
R[a] = b;
L[b] = a;
}
void insert(int k,int x)
{
e[idx] = x;
connect(idx,R[k]);
connect(k,idx);
idx++;
}
void del(int k)
{
connect(L[k],R[k]);
}
int main()
{
int M;
cin>>M;
init();
while(M --)
{
//这边要用字符串,字符数组,cin不能输入
string op;
int k,x;
cin>> op;
if( op == "L")
{
cin>>x;
insert(0,x);
}else if(op == "R")
{
cin >> x;
insert(L[1],x);
}else if(op == "D")
{
cin >> k;
del(k+1);
}else if(op == "IL")
{
cin>>k>>x;
insert(L[k+1],x);//插入操作默认是从k的后面插入,所以指定k的前面插入,就用k的前面的进行插入
}else{
cin>>k>>x;
insert(k+1,x);
}
}
for(int i = R[0]; i != 1; i = R[i])cout<<e[i]<<' ';
cout<<endl;
return 0;
}