链表

单链表

  • 邻接表——存储图和树

双链表

  • 优化某些问题

题目链接

826. 单链表 - AcWing题库

单链表模板代码

#include<iostream>

using namespace std;

const int N = 100010;

// head表示头节点的下标
// e[i]表示i节点的值
// ne[i]表示节点i的next指针是多少
// idx存储当前已经用到了哪个节点

int head, e[N], ne[N], idx;

// 初始化
void init()
{
    head = -1;
    idx = 0;
}

// 将x插到头节点
void add_to_head(int x)
{
    e[idx] = x;
    ne[idx] = head;
    head = idx++;
}

// 将x插到下标是k的点后面
void add(int k, int x)
{
    e[idx] = x;
     ne[idx] = ne[k];
    ne[k] = idx++;
}

// 将下标是k的点后面的点删除
void remove(int k){
    ne[k]=ne[ne[k]];
}

int main(){
    int m;
    cin >> m;
    
    init();
    while(m--)
    {
        int k, x;
        char op;
        cin>>op;
        if(op == 'H')
        {
            cin >> x;
            add_to_head(x);
        }
        else if(op == '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]<<' ';
    }
    return 0;
}
  1. H x,表示向链表头插入一个数 x

  2. D k,表示删除第 k 个插入的数后面的数(当 k0 时,表示删除头结点)。

  3. I k x,表示在第 k 个插入的数后面插入一个数 x(此操作中 k 均大于 0)。

单链表题目解析.png

最讨厌你,也最喜欢你