二、数据结构1:单链表 模板题+算法模板(单链表)

news2024/11/26 9:55:09

文章目录

  • 算法模板
    • 单链表题目模板
  • 模板题
    • 单链表
      • 原题链接
      • 题目
      • 思路
      • 题解

算法模板

单链表题目模板

// head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点
int head, e[N], ne[N], idx;

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

// 在链表头插入一个数a
void insert(int a)
{
    e[idx] = a, ne[idx] = head, head = idx ++ ;
}

// 将头结点删除,需要保证头结点存在
void remove()
{
    head = ne[head];
}

模板题

单链表

原题链接

https://www.acwing.com/problem/content/828/

题目

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

向链表头插入一个数;
删除第 k
个插入的数后面的数;
在第 k
个插入的数后插入一个数。
现在要对该链表进行 M
次操作,进行完所有操作后,从头到尾输出整个链表。

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

输入格式
第一行包含整数 M
,表示操作次数。

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

H x,表示向链表头插入一个数 x

D k,表示删除第 k
个插入的数后面的数(当 k
为 0
时,表示删除头结点)。
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

思路

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题解

#include <iostream>
using namespace std;

const int N = 1e5 + 10;
int head,e[N],ne[N],idx;
int n;
// head 表示头结点的下标
// e[i] 表示节点i的值
// ne[i] 表示节点i的next指针是多少
// idx 存储当前已经用到了哪个点

// 初始化
void init(){
	head = -1;
	idx = 0;
}
// 将x插到头结点
void add_to_head(int x){
	ne[idx] = head;
	e[idx] = x;
	head = idx;
	idx ++;
}
// 将x插到下标是k的点后面
void add(int k,int x){
	ne[idx] = ne[k];
	e[idx] = x;
	ne[k] = idx; 
	idx++;
}
// 将下标是k的点后面的点删掉
void remove(int k){
	ne[k] = ne[ne[k]];
}
int main(){
	cin>>n;
	
	init();
	
	while(n--){
		char c;
		cin>>c; 
		int k,x;
		if(c == 'H'){
			cin>>x;
			add_to_head(x);
		}
		else if(c == 'I'){
			cin>>k>>x;
			add(k-1,x); // k从0开始 
		}
		else{
			cin>>k;
			if(!k) head = ne[head];
			remove(k-1); // k从0开始 
		}
	}
	for(int i=head;i!=-1;i=ne[i]) cout<<e[i]<<" ";

	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/525400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【001】C++的第一个程序Hello World

C的第一个应用程序&#xff08;Hello World程序&#xff09; 引言一、代码二、代码解释三、注意事项四、注释语句总结 引言 &#x1f4a1; 作者简介&#xff1a;专注于C/C高性能程序设计和开发&#xff0c;理论与代码实践结合&#xff0c;让世界没有难学的技术。 &#x1f449;…

《JavaEE》网络编程套接字

文章目录 Socket我们来解释一下上面叫做有无连接我们再来理解一下上面是可靠传输和不可靠传输面向字节流与面向数据报的区别&#xff08;后期会具体分析这个&#xff09;全双工 单双工 UDPDatagramSocketDatagramPacket我们来尝试写一下UDP版本的代码 TCPServerSocketSocket我们…

什么年代了?不会还有人不会插件化吧?

一&#xff0e;到底什么是插件化开发 插件化开发是将整个app拆分成很多模块&#xff0c;这些模块包括一个宿主和多个插件&#xff0c;每个模块都是一个apk&#xff0c;最终打包的时候将宿主apk和插件apk分开或者联合打包。 为什么要将一定要使用插件化开发呢&#xff1f; 宿…

【Linux】一文带你掌握Linux权限!

Linux权限 问题一&#xff1a;Linux下的用户分类有哪些&#xff1f;问题二&#xff1a;什么叫做权限&#xff1f;问题三&#xff1a;见一见没有权限是什么现象(看看就好了)问题四&#xff1a;权限的修改问题。chmodchownchgrp 问题五&#xff1a;其他问题(三个小问题)文件的初始…

51单片机(十五)直流电机驱动(PWM)

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

【并发编程】深入理解Java并发之synchronized实现原理

文章目录 一、synchronized 实现同步示例二、synchronized 典型错误示例三、Java 对象头与 Monitor四、synchronized代码块底层原理五、synchronized方法底层原理六、Java虚拟机对synchronized的优化 一、synchronized 实现同步示例 public class MyThread extends Thread{pri…

分布式事务之Seata讲解

文章目录 1 Seata1.1 简介1.2 架构1.3 四种事务模式1.3.1 XA1.3.1.1 定义1.3.1.2 优缺点1.3.1.3 代码中实现 1.3.2 AT1.3.2.1 定义1.3.2.2 全局锁1.3.2.2.1 AT模式脏写问题1.3.2.2.2 全局锁 1.3.2.3 AT模式优缺点1.3.2.4 与XA模式区别1.3.2.5 代码中实现 1.3.3 TCC模式1.3.3.1 …

云服务器配合CookieCloud插件,实现浏览器网站Cookie同步

CookieCloud是由方糖开发的一个浏览器网站Cookie同步工具&#xff0c;Cookie是一个可以短时间代表我们登录身份的凭证&#xff0c;CookieCloud同步Cookie其实就是在同步登录状态&#xff0c;由一个浏览器插件和一个可以自行搭建的服务器端组成&#xff0c;可以定时地、在本地加…

linux pl320 mbox控制器驱动分析 - (2) 消息传递示例

linux pl320 mbox控制器驱动分析 - &#xff08;2&#xff09;消息传递示例 1 Messaging from Core0 to Core12 Back-to-back messaging from Core0 to Core13 Messaging from Core0 to Cores 1, 2, and 3 using Auto Acknowledge4 Auto Link messaging from Core0 to Core1 us…

算法设计 || 第5题:钓鱼问题-北京大学网站在线算法题(贪心算法)

目录 &#xff08;一&#xff09;题目网址视频网址 &#xff08;二&#xff09;手写草稿思考 Part1: 慕课PPT Part2: 笨蛋的学习 &#xff08;一&#xff09;题目网址视频网址 北京大学网站在线算法题&#xff1a;1042 -- Gone Fishing (poj.org) 视频讲解&#xff08;北…

进一步了解傅里叶变换的应用(附案例代码)

傅里叶变换&#xff08;Fourier Transform&#xff09;是一种非常常见的数学工具&#xff0c;能够将一个函数&#xff08;或时域信号&#xff09;分解成一些基本频率的合成。它使我们可以将时域信号&#xff08;例如波形图&#xff09;转换成频域信号&#xff0c;因而更容易地看…

ArcGIS按比例缩放图斑

今天介绍一下&#xff0c;在ArcGIS中&#xff0c;当我们需要按比例缩放图斑时&#xff0c;该如何操作呢。 可以使用“缩放”工具对要素进行缩放&#xff08;使整个要素变大或变小&#xff09;。在处理比例略有误差的数据&#xff08;例如&#xff0c;来自多个源的细分宗地&…

ChatGPT背后的大预言模型 以及《ChatGPT全能应用一本通》介绍

大型语言模型已经彻底改变了我们通过自然语言处理进行交互的方式&#xff0c;使得更多的基于语言的应用程序成为可能&#xff0c;例如语言翻译&#xff0c;问答&#xff0c;文本摘要和聊天机器人。 由于这些模型是在大量文本数据集&#xff08;如书籍&#xff0c;文章和社交媒…

C learning_13 操作符前篇(条件操作符、 逗号表达式、 下标引用、函数调用和结构成员、 表达式求值)

目录 条件操作符 逗号表达式 下标引用、函数调用和结构成员 1. [ ] 下标引用操作符 2. ( ) 函数调用操作符 3. 访问一个结构的成员 表达式求值 1.隐式类型转换 2.算术转换 3.操作符的属性 条件操作符 条件操作符是一种用于简化条件表达式的运算符。它通常表示为问号 …

《游戏编程模式》--重访设计模式--学习

序 在线阅读地址&#xff1a; 命令模式 Design Patterns Revisited 游戏设计模式 (tkchu.me) 参考文章&#xff1a; GameDesignPattern_U3D_Version/Assets/002FlyweightPattern at master TYJia/GameDesignPattern_U3D_Version GitHub 看到了没见过的观点&#xff1a;…

我的算法基础实验代码-下篇

第一题 题目介绍 输入一些数值&#xff0c;求出现的次数最多的数。如果有多个并列&#xff0c;则从大到小输出。 解题思路 代码实现 package com.nineWeek;import java.util.*;/*** author WangYH* version 2021.1.3* date 2023/5/7 18:29*/public class NumMostTimes {pu…

第十四届蓝桥杯b组c/c++

D:飞机降落&#xff08;全排列&#xff09; #include<iostream> #include<cstring> using namespace std;const int N 12; int n; struct node{int t, d, l; //t为此飞机的最早降落时间 d为盘旋时间 l为降落所需时间 }p[N]; bool st[N];//DFS求全排列模型 bool d…

【真题解析】系统集成项目管理工程师 2021 年下半年真题卷

本文为系统集成项目管理工程师考试(软考) 2021 年上半年真题&#xff0c;包含答案与详细解析。考试共分为两科&#xff0c;成绩均 ≥45 即可通过考试&#xff1a; 综合知识&#xff08;选择题 75 道&#xff0c;75分&#xff09;案例分析&#xff08;问答题 4 道&#xff0c;75…

ChatGPT 学习与使用总结

ChatGPT 学习与使用总结 最近ChatGPT大火&#xff0c;2023有可能就是AGI元年了。近两个月使用下来&#xff0c;ChatGPT给我最深刻的感觉就是它所具备的理解和思维能力&#xff0c;第一次体验时真的是非常震撼&#xff0c;完全是之前各种『人工智障』智能助理所不能比拟的&…

Windows系统出现蓝屏怎么办?这些方法可以修复!

Windows 系统蓝屏死机&#xff08;BSOD&#xff09;&#xff0c;也被称为“停止错误”&#xff0c;是Windows系统最常见的故障之一。 当Windows遇到严重的故障时就会显示蓝屏&#xff0c;系统崩溃。蓝屏上显示一个停止代码&#xff0c;如"MEMORY_MANAGEMENT"&#xf…