数据结构-单链表

看了图论,发现很多都要用到链表(数组模拟)

e[N]:存储这个位置的值

ne[N]:存储下一个位置的下标

题目:

实现一个单链表,链表初始为空,支持三种操作:

  1. 向链表头插入一个数;
  2. 删除第 k个插入的数后面的一个数;
  3. 在第 k个插入的数后插入一个数。

现在要对该链表进行 M次操作,进行完所有操作后,从头到尾输出整个链表。

注意:题目中第 k个插入的数并不是指当前链表的第 k 个数。例如操作过程中一共插入了 n 个数,则按照插入的时间顺序,这 n 个数依次为:第 1 个插入的数,第 2 个插入的数,...第 n个插入的数。

输入格式

第一行包含整数 M,表示操作次数。

接下来 M行,每行包含一个操作命令,操作命令可能为以下几种:

  1. H x,表示向链表头插入一个数 x。
  2. D k,表示删除第 k个插入的数后面的数(当 k 为 0时,表示删除头结点)。
  3. I k x,表示在第 k个插入的数后面插入一个数 x(此操作中 k 均大于 0)。
输出格式

共一行,将整个链表从头到尾输出。

数据范围

1≤M≤100000

所有操作保证合法。

输入样例:
复制代码
10
H 9
I 1 1
D 1
D 0
H 6
I 3 6
I 4 5
I 4 5
I 3 4
D 6
输出样例:
复制代码
6 4 6 5

代码:

cpp 复制代码
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<unordered_map>
using namespace std;
typedef pair<int,int> PII;
const int N = 1e5 + 10;
int t,head,e[N],ne[N],idx;
void init(){
	head = -1;
	idx = 0;
}
void cha_head(int x){
	e[idx] = x;
	ne[idx] = head;
	head = idx;
	idx ++;
}
void delete_k(int x){
	ne[x] = ne[ne[x]];
}
void cha_k(int k,int x){
	e[idx] = x;
	ne[idx] = ne[k];
	ne[k] = idx;
	idx ++;
}
int main(){
	scanf("%d",&t);
	init();
	while(t --){
		char c;
		cin >> c;
		if(c == 'H'){
			int x;
			scanf("%d",&x);
			cha_head(x);
		}
		else if(c == 'D'){
			int k;
			scanf("%d",&k);
			if(k == 0) head = ne[head];
			delete_k(k-1);
		}else if(c == 'I'){
			int k,x;
			scanf("%d %d",&k,&x);
			cha_k(k-1,x);
		}
	}
	for(int i = head;i != -1;i = ne[i])
		cout << e[i] << ' ';
	return 0;
}

相关推荐
田梓燊9 分钟前
leetcode 160
算法·leetcode·职场和发展
_深海凉_16 分钟前
LeetCode热题100-颜色分类
python·算法·leetcode
网安INF29 分钟前
数据结构第三章:栈、队列和数组
数据结构
hetao17338371 小时前
2026-04-09~12 hetao1733837 的刷题记录
c++·算法
6Hzlia1 小时前
【Hot 100 刷题计划】 LeetCode 136. 只出现一次的数字 | C++ 哈希表&异或基础解法
c++·算法·leetcode
MWWZ1 小时前
最近的一些软件更新
opencv·算法·计算机视觉
CoovallyAIHub1 小时前
视频理解新范式:Agent不再被动看视频,LensWalk让它自己决定看哪里
算法·架构·github
CoovallyAIHub1 小时前
斯坦福丨AirVLA:将地面机械臂模型迁移至无人机实现空中抓取,成功率从23%提升至50%
算法·架构·github
yuannl102 小时前
数据结构----双端队列实现
数据结构
无限进步_2 小时前
【C++】只出现一次的数字 II:位运算的三种解法深度解析
数据结构·c++·ide·windows·git·算法·leetcode