[AcWing]827. 双链表(C++实现)双链表模板题
[AcWing]827. 双链表(C++实现)双链表模板题
- 1. 题目
- 2. 读题(需要重点注意的东西)
- 3. 解法
- 4. 可能有帮助的前置习题
- 5. 所用到的数据结构与算法思想
- 6. 总结
1. 题目
2. 读题(需要重点注意的东西)
初步思路:结构体和指针的方法,面试常用,但是笔试不常用的方法。原因是每次都要new一个新Node,太慢了。
因此在本文中使用静态链表,即用数组模拟链表。
初始化
注意,idx是从2开始的
插入操作
在k节点的左侧插入相当于从k节点的左侧节点的右侧插入!即:
删除操作
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++实现)双链表模板题相关推荐
- AcWing 827. 双链表(C++)
目录 1.题目描述 2.AC 1.题目描述 827. 双链表 实现一个双链表,双链表初始为空,支持 55 种操作: 在最左侧插入一个数: 在最右侧插入一个数: 将第 kk 个插入的数删除: 在第 kk ...
- Linux内核链表之共享双链表
说明 共享双链表意义在于,可以用一套函数维护不同数据类型的双链表 准备 定义双链表 #include <iostream> #include <string>using nam ...
- 【数据结构】线性表的链式表示-循环单链表、循环双链表、静态链表
循环单链表 从任何一个结点出发都能访问到链表的每一个元素 判空条件不是头节点的后继指针是否为空,而是它是否等于头指针 有时对单链表常做的操作实在表头和表尾进行的,此时可对循环单链表不设头指针而仅设尾指 ...
- 链表之删除双链表倒数第K个节点
链表之删除双链表倒数第K个节点 题目: 链表之删除双链表倒数第K个节点 思路: 之前写过 http://blog.csdn.net/u011068702/article/details/50280 ...
- 链表(单/双/单循环/双循环)
文中链接附上java版代码 1.单链表 单链表是一种链式存储的数据结构,方便插入/删除数据元素,对比数组,在进行插入删除等操作时,更节省空间.单链表中每一个结点的构成都是由数据元素+指针构成的 2.单 ...
- 【数据结构】之双向链表、双端(双向)链表、循环(双向)链表
双向链表.双端(双向)链表.循环(双向)链表示意(简)图: 声明:下面各图中,箭头指向的是整个节点,而不是指向节点中的prior或next. 双向链表:只有一个指针指向最开始的结点. 双端(双向)链表 ...
- 递增的整数序列链表的插入_每日算法题 | 剑指offer 链表专题 (5)链表中倒数第k个节点...
点击上方"Jerry的算法和NLP",选择"星标"公众号 重磅干货,第一时间送达 题目 链表中倒数第k个节点 题目要求 输入一个链表的头结点,从尾到头反过来打印 ...
- 【数据结构-线性表】顺序表和链表(几种链表操作技巧+几种链表形式)
链表的操作 链表中的插入(头插) void *insertNode(ListNode *head, ListNode *node) {node->next = head;head = node; ...
- 【数据结构链表】之五单链表
一:链表基础 1.链表基础----------------摘录自百度百科 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中 ...
最新文章
- 让产品经理GC的文本段落两端对齐css
- mysql校对规则_MYSQL校对规则
- ORA-12519: TNS:no appropriate service handler found 解决
- protobufjs 命令执行_protobufjs简单使用
- OJ7627-鸡蛋的硬度【各种dp之4】
- leetcode374. 猜数字大小(二分法)
- java中的check函数_java中checked和unchecked 异常处理
- P1091 合唱队形
- 同是4G标准,TD和FDD怎么区分?谁更快?
- 模糊控制 进化算法 PID参数整定
- win10任务栏无反应假死解决办法
- 通信行业英文缩写整理(待更新)
- 【读者来信】培训完没有类似的工作经验,该如何找工作?
- 用Python-opencv快速实现人脸识别功能(从零开始教你)(复制粘贴即可用)
- flowable exception during resetting expired jobs: Could not open JDBC Connection for transaction
- 如何删去微信小程序服务器,微信小程序怎么注销
- 边缘检测:更丰富的卷积特征 Richer Convolutional Features for Edge Detection
- RGB颜色与16进制色以及透明色
- 均线多头排列选股公式,选出均线多头刚起步的标的
- 超全面的!电工必备六大类基础知识汇总~