美文网首页
15.双链表

15.双链表

作者: Tsukinousag | 来源:发表于2020-02-19 23:38 被阅读0次

原题链接

//把0看成左端点,1看成右端点,刚开始的时候,左端点指向右端点,右端点指向左端点

  • 插入操作
void add(int k,int x)//第k个元素后面插入x
{
    e[idx]=x;
    r[idx]=r[k];
    l[idx]=k;
    l[r[k]]=idx;//先后顺序注意
    r[k]=idx++;
}
  • 删除操作

    //让这个点的左边指向右边,这个点的右边指向左边

void Remove(int k)//删除第k个元素
{
    r[l[k]]=r[k];
    l[r[k]]=l[k];
}

注意:因为idx是从2开始的,所以第k个插入的数对应的下标是k+1。
//是从0开始的话,第k个数对应第k-1的下标

#include <iostream>
using namespace std;
int l[MAX],r[MAX],e[MAX],idx;
void init()
{
    //0表示左端点,1表示右端点
    r[0]=1;
    l[1]=0;
    idx=2;
}
void add(int k,int x)//第k个元素后面插入x
{
    e[idx]=x;
    r[idx]=r[k];
    l[idx]=k;
    l[r[k]]=idx;
    r[k]=idx++;
}
void Remove(int k)//删除第k个元素
{
    r[l[k]]=r[k];
    l[r[k]]=l[k];
}
int main()
{
    init();
    int m;
    scanf("%d",&m);
    for(int i=0;i<m;i++)
    {
        string str;
        int t,num;
        cin>>str;
        if(str[0]=='L')
        {
            scanf("%d",&t);
            add(0,t);
        }
        else if(str[0]=='R')
        {
            scanf("%d",&t);
            add(l[1],t);
        }
        else if(str[0]=='D')
        {
            scanf("%d",&t);
            Remove(t+1);
        }
        else if(str=="IL")
        {
            scanf("%d%d",&t,&num);
            add(l[t+1],num);
        }
        else if(str=="IR")
        {
            scanf("%d%d",&t,&num);
            add(t+1,num);
        }
    }
    for(int i=r[0];i!=1;i=r[i])
        cout<<e[i]<<" ";
    return 0;
}

相关文章

  • 15.双链表

    原题链接 //把0看成左端点,1看成右端点,刚开始的时候,左端点指向右端点,右端点指向左端点 插入操作 删除操作/...

  • 剑指 offer:15、反转链表

    15. 反转链表 题目描述 输入一个链表,反转链表后,输出新链表的表头。 解题思路: 通过3个指针遍历一遍链表,实...

  • 剑指offer 15~17

    15.反转链表输入一个链表,反转链表后,输出链表的所有元素。 16.合并两个排序的链表输入两个单调递增的链表,输出...

  • 双链表的操作

    双链表的代码定义 双链表的操作 初始化双链表 插入 前插法 尾插法 任意位置插入 双链表的遍历输出 元素删除与双链...

  • 第二章 数据结构模板

    单链表 —— 模板题 AcWing 826. 单链表 双链表 —— 模板题 AcWing 827. 双链表 栈 —...

  • [数据结构]第二章线性表(4)——双链表

    双链表 单链表VS双链表 双链表基本操作 初始化 插入 优化之后 删除 遍历 总结反思 源码 源码查看地址,点击 ...

  • 大厂算法面试之leetcode精讲15.链表

    大厂算法面试之leetcode精讲15.链表 视频讲解(高效学习):点击学习[https://xiaochen10...

  • 15. 反转链表

    解题思路 递归 迭代

  • 数据结构重学日记(十)双链表

    概念 单链表:单个指针,单向火车。 双链表:双指针,电梯。 双链表在单链表的基础上增加了一个指向前边结点的指针。 ...

  • 2018-07-26

    合并有顺序的数组 打印两个有序链表的公共部分 在单链表和双链表中删除倒数第k个节点 单链表 双链表 删除链表的中间...

网友评论

      本文标题:15.双链表

      本文链接:https://www.haomeiwen.com/subject/epxtqhtx.html