07-单链表-单链表基本操作

题目

07-单链表-单链表基本操作_第1张图片

07-单链表-单链表基本操作_第2张图片 

来源

826. 单链表 - AcWing题库

思路

详见代码,主要思想就是用数组来模拟链表的创建。数组其实跟静态链表等价,由于动态链表动态new对于大数据太过于耗时,因此采用数组的方式。那数组如何起到链表的效果?用下标来索引。

代码

#include
using namespace std;
const int N=100010;
int head,e[N],ne[N],idx;
//初始化
void init(){
    head=-1;
    idx=0;
}
//插入到头结点之后(把新的点插到头结点的位置80%)
void add2head(int x){
    e[idx]=x;
    ne[idx]=head; //第一步
    head=idx; //第二步
    idx++;
}
//将节点插入到下标是K的后面
void add2k(int k,int x){
    e[idx]=x;
    ne[idx]=ne[k]; //第一步
    ne[k]=idx; //第二步
    idx++;
}
//将下标是K的点删掉
void del2k(int k){
    ne[k]=ne[ne[k]];
}

int main(){
    int n;
    cin>>n;
    init();
    while(n--){
        char op;
        int x,k;
        cin>>op;
        if(op=='H'){
            cin>>x;
            add2head(x);
        }
        else if(op=='D'){
            cin>>k;
            if(k==0)head=ne[head];
            //k=0,删除头结点,相当于将head指向head下下个点
            del2k(k-1); //因为0号点是第一个插入的点
        }else if(op=='I'){
            cin>>k>>x;
            add2k(k-1,x);//因为0号点是第一个插入的点
        }
    }
    for(int i=head;i!=-1;i=ne[i]){
        cout<

你可能感兴趣的:(2025算法机试,算法,数据结构)