[AcWing]827. 双链表(C++实现)双链表模板题

  • 1. 题目
  • 2. 读题(需要重点注意的东西)
  • 3. 解法
  • 4. 可能有帮助的前置习题
  • 5. 所用到的数据结构与算法思想
  • 6. 总结

1. 题目


2. 读题(需要重点注意的东西)

初步思路:结构体和指针的方法,面试常用,但是笔试不常用的方法。原因是每次都要new一个新Node,太慢了。

因此在本文中使用静态链表,即用数组模拟链表。

  1. 初始化

    注意,idx是从2开始的

  2. 插入操作


    在k节点的左侧插入相当于从k节点的左侧节点的右侧插入!即:

  3. 删除操作

3. 解法

---------------------------------------------------解法---------------------------------------------------

#include<iostream>
using namespace std;const int N = 1e5+10;
int e[N],l[N],r[N],idx;
int k,x,m;void init(){r[0] = 1;l[1] = 0;idx = 2;
}// 在节点下标为k的节点的右边插入一个数x
void insert(int k,int x){e[idx] = x;l[idx] = k;r[idx] = r[k];l[r[k]] = idx;r[k] = idx;idx ++;
}// 删除下标为k的节点
void remove(int k){r[l[k]] = r[k];l[r[k]] = l[k];
}int main(){init();cin >> m;while(m--){string op;cin >> op;// 在头结点插值是在0的右边插入if(op == "L"){cin >> x;insert(0,x);}// 在尾端插是在1的左边插else if(op == "R"){cin >> x;insert(l[1],x);}// 将第 k 个插入的数删除,第 k 个插入的数下标为k+1,else if(op == "D"){cin >> k;remove(k+1);}else if(op == "IL"){cin >> k >> x;insert(l[k+1],x);}else if(op == "IR"){cin >> k >> x;insert(k+1,x);}}// 注意:从r[0]开始遍历for(int i = r[0];i != 1;i = r[i]) cout << e[i] << " ";cout << endl;return 0;
}

4. 可能有帮助的前置习题

5. 所用到的数据结构与算法思想

6. 总结

双链表用静态数组实现模板题,推荐完全背下来。

[AcWing]827. 双链表(C++实现)双链表模板题相关推荐

  1. AcWing 827. 双链表(C++)

    目录 1.题目描述 2.AC 1.题目描述 827. 双链表 实现一个双链表,双链表初始为空,支持 55 种操作: 在最左侧插入一个数: 在最右侧插入一个数: 将第 kk 个插入的数删除: 在第 kk ...

  2. Linux内核链表之共享双链表

    说明 共享双链表意义在于,可以用一套函数维护不同数据类型的双链表 准备 定义双链表 #include <iostream> #include <string>using nam ...

  3. 【数据结构】线性表的链式表示-循环单链表、循环双链表、静态链表

    循环单链表 从任何一个结点出发都能访问到链表的每一个元素 判空条件不是头节点的后继指针是否为空,而是它是否等于头指针 有时对单链表常做的操作实在表头和表尾进行的,此时可对循环单链表不设头指针而仅设尾指 ...

  4. 链表之删除双链表倒数第K个节点

    链表之删除双链表倒数第K个节点 题目: 链表之删除双链表倒数第K个节点   思路: 之前写过 http://blog.csdn.net/u011068702/article/details/50280 ...

  5. 链表(单/双/单循环/双循环)

    文中链接附上java版代码 1.单链表 单链表是一种链式存储的数据结构,方便插入/删除数据元素,对比数组,在进行插入删除等操作时,更节省空间.单链表中每一个结点的构成都是由数据元素+指针构成的 2.单 ...

  6. 【数据结构】之双向链表、双端(双向)链表、循环(双向)链表

    双向链表.双端(双向)链表.循环(双向)链表示意(简)图: 声明:下面各图中,箭头指向的是整个节点,而不是指向节点中的prior或next. 双向链表:只有一个指针指向最开始的结点. 双端(双向)链表 ...

  7. 递增的整数序列链表的插入_每日算法题 | 剑指offer 链表专题 (5)链表中倒数第k个节点...

    点击上方"Jerry的算法和NLP",选择"星标"公众号 重磅干货,第一时间送达 题目 链表中倒数第k个节点 题目要求 输入一个链表的头结点,从尾到头反过来打印 ...

  8. 【数据结构-线性表】顺序表和链表(几种链表操作技巧+几种链表形式)

    链表的操作 链表中的插入(头插) void *insertNode(ListNode *head, ListNode *node) {node->next = head;head = node; ...

  9. 【数据结构链表】之五单链表

    一:链表基础 1.链表基础----------------摘录自百度百科 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中 ...

最新文章

  1. 让产品经理GC的文本段落两端对齐css
  2. mysql校对规则_MYSQL校对规则
  3. ORA-12519: TNS:no appropriate service handler found 解决
  4. protobufjs 命令执行_protobufjs简单使用
  5. OJ7627-鸡蛋的硬度【各种dp之4】
  6. leetcode374. 猜数字大小(二分法)
  7. java中的check函数_java中checked和unchecked 异常处理
  8. P1091 合唱队形
  9. 同是4G标准,TD和FDD怎么区分?谁更快?
  10. 模糊控制 进化算法 PID参数整定
  11. win10任务栏无反应假死解决办法
  12. 通信行业英文缩写整理(待更新)
  13. 【读者来信】培训完没有类似的工作经验,该如何找工作?
  14. 用Python-opencv快速实现人脸识别功能(从零开始教你)(复制粘贴即可用)
  15. flowable exception during resetting expired jobs: Could not open JDBC Connection for transaction
  16. 如何删去微信小程序服务器,微信小程序怎么注销
  17. 边缘检测:更丰富的卷积特征 Richer Convolutional Features for Edge Detection
  18. RGB颜色与16进制色以及透明色
  19. 均线多头排列选股公式,选出均线多头刚起步的标的
  20. 超全面的!电工必备六大类基础知识汇总~

热门文章

  1. java latin1编码_从java查询latin1列
  2. linux安装gtk .tar.xz,CentOS搭建GTK
  3. JavaScript.05.JS和CSS的交互
  4. maven可用国内镜像 阿里云 飞速下载
  5. 需求最高的8种编程语言
  6. 胖虎算法初练七之——跳跃游戏
  7. ProE拉伸特征总结
  8. 使用大淘客接口获取产品数据
  9. PL/SQL Developer常用命令和设置
  10. pagenation