每日一题2023.7.22|链表的基本操作

news2024/11/26 19:57:32

链表的基本操作

题目描述

考察链表的基本操作

输入

输入数据只有一组,第一行有n+1个整数,第一个整数是这行余下的整数数目n,后面是n个整数。这一行整数用来初始化列表的,并且输入的顺序与列表中的顺序相反,也就是说如果列表是1、2、3那么输入的顺序是3、2、1。第二行有一个整数m,代表下面还有m行,每行有一个字符串,字符串是“get”、“insert”、“delete”,“show”中的一种。如果是“get”或者“delete”,则其后跟着一个整数a,代表获得或者删除第a个元素;如果是“insert”,则其后跟着两个整数a和e,代表在第a个位置前面插入e;"show"之后没有整数。

输出

如果获取成功,则输出该元素;如果删除成功则输出“delete OK”;如果获取失败或者删除失败,则输出“get fail”以及“delete fail”。如果插入成功则输出"insert OK",否则输出“link list is empty”。注意:所有的双引号不输出

样例输入
3 3 2 1
21
show
delete 1
show
delete 2
show
delete 1
show
delete 2
insert 2 5
show
insert 1 5
show
insert 1 7
show
insert 2 5
show
insert 3 6
show
insert 1 8
show
get 2

样例输出
1 2 3
delete OK
2 3
delete OK
2
delete OK
Link list is empty
delete fail
insert fail
Link list is empty
insert OK
5
insert OK
7 5
insert OK
7 5 5
insert OK
7 5 6 5
insert OK
8 7 5 6 5
7

//链表的一些基本操作(insert\delete\get\show)
#include<iostream>
#include<string>
#include<vector>
using namespace std;
struct LinkNode{
    int val;
    LinkNode *next;
    LinkNode():val(0),next(nullptr){}
    LinkNode(int x):val(x),next(nullptr){}
    LinkNode(int x,LinkNode *ne):val(x),next(ne){}
};
LinkNode *built(const vector<int>&);//头插法建立链表
void show(LinkNode*);//打印链表
LinkNode *del(LinkNode *,int );//删除链表中的元素
LinkNode *inse(LinkNode *,int ,int);//向链表中加入元素
void get(LinkNode *,int);//获取链表中的元素
int main(){
    int N;cin>>N;//链表元素个数
    if(N==0) {cout<<"Link list is empty"<<endl;return 0;}
    vector<int> nums(N,0);
    for(int i=0;i<N;++i) cin>>nums[i];
    LinkNode *list = built(nums);
    int cou;cin>>cou;//命令个数
    string com;//具体的命令
    int in,x;//in表示操作的位置,x表示数值
    while(cou--){
        cin>>com;
        if(com=="show") show(list);
        else if(com=="delete"){cin>>in;list = del(list,in);}
        else if(com=="get") {cin>>in;get(list,in);}
        else if(com=="insert") {cin>>in>>x;list = inse(list,in,x);}
        else cout<<"the command is delete or insert or get"<<endl;
    }
    return 0;
}
//头插法建立链表
LinkNode *built(const vector<int>&nums){
    LinkNode *vhead = new LinkNode();//建立虚拟头结点
    for(const int&num:nums){
        LinkNode *node = new LinkNode(num);
        node->next = vhead->next;
        vhead->next = node;
    }
    LinkNode *head = vhead->next;
    delete vhead;
    return head;
}
//打印链表
void show(LinkNode *head){
    if(!head) cout<<"Link list is empty";
    while(head){
        cout<<head->val<<" ";
        head=head->next;
    }
    cout<<endl;
}
//删除链表中的元素
LinkNode *del(LinkNode *head,int in){
    LinkNode *vhead = new LinkNode(0,head);
    LinkNode *mv = vhead;
    for(int i=1;i<in&&mv->next;++i) mv=mv->next;
    if(!(mv->next)) cout<<"delete fail"<<endl;
    else {
        LinkNode *te = mv->next;
        mv->next = mv->next->next;
        delete te;
        cout<<"delete OK"<<endl;
    }
    head = vhead->next;
    delete vhead;
    return head;
}

//向链表中加入元素
LinkNode *inse(LinkNode *head,int in,int x){
    LinkNode *vhead = new LinkNode(0,head);
    LinkNode *mv = vhead;
    for(int i=1;i<in&&mv;++i) mv=mv->next;
    if(!mv) cout<<"insert fail"<<endl;
    else {
        LinkNode *node = new LinkNode(x);
        node->next = mv->next;
        mv->next = node;
        cout<<"insert OK"<<endl;
    }
    head = vhead->next;
    delete vhead;
    return head;
}
//获取链表中的元素
void get(LinkNode *head,int in){
    for(int i=1;i<in&&head;++i) head=head->next;
    if(!head) cout<<"get fail"<<endl;
    else cout<<head->val<<endl;
}

在这里插入图片描述

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

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

相关文章

htmlCSS-----浮动

目录 前言&#xff1a; 浮动 1.浮动的效果 2.浮动的特点 3.浮动的写法 4.浮动的原理 5.浮动的作用 6.案例 7.浮动的缺陷与解决方式 浮动问题 解决方式 8.补充说明 前言&#xff1a; 浮动是html里面重要的一部分&#xff0c;前面我们学习了三种元素的类型&#xff08;…

element中table的表格更新数据之后保留原来的勾选状态

reserve-selection: 仅对 typeselection 的列有效&#xff0c;类型为 Boolean&#xff0c;为 true 则会在数据更新之后保留之前选中的数据&#xff08;需指定 row-key&#xff09; <el-table ref"table" :data"DataList" :row-key"rowKey"&g…

使用rknn-toolkit2把YOLOV5部署到OK3588上

使用rknn-toolkit2把YOLOV5部署到OK3588上 虚拟环境搭建软件包安装在PC机上运行yolov5目标检测 虚拟环境搭建 首先在PC的ubuntu系统安装虚拟环境&#xff1a; 我的服务器是ubuntu18.04版本&#xff0c;所以安装python3.6 conda create -n ok3588 python3.6 需要键盘输入y&…

【博客681】k8s list机制与resourceVersion语义

k8s list机制与resourceVersion语义 K8s 架构&#xff1a;环形层次视图 对于 K8s 集群&#xff0c;从内到外的几个组件和功能&#xff1a; etcd&#xff1a;持久化 KV 存储&#xff0c;集群资源&#xff08;pods/services/networkpolicies/…&#xff09;的唯一的权威数据&…

实例023 建立字体形状窗体

实例说明 大家都见过不规则形状的窗体吧&#xff0c;那么如何制作一个文字形的窗体呢&#xff1f;文字形窗体一般应用在屏幕提示中&#xff0c;如收款机屏幕等。运行本例&#xff0c;效果如图1.23所示。 技术要点 以前&#xff0c;创建字体形窗体是一个既费时又费人力的过程&…

K8S初级入门系列之七-控制器(Job/CronJob/Daemonset)

一、前言 前一章节我们介绍了RC&#xff0c;RS控制器&#xff0c;其主要针对在线业务Pod部署&#xff0c;比如nginx&#xff0c;这些业务是需要确保7*24持续运行的&#xff0c;还有一类离线业务&#xff0c;比如定时任务&#xff0c;大数据离线计算等&#xff0c;在有任务的才需…

在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试

介绍 在命令行模式下执行Java程序&#xff0c;如果输入中文&#xff0c;经常会出现和代码中的解码字符集不匹配的情况&#xff0c;导致结果不正确。 在命令行模式下执行Java程序&#xff0c;输入中文&#xff0c;其实是用某种字符集编码成字节流&#xff0c;Java程序读取该字节…

rk3588 双HDMI冲突问题与HDMI不能热插拔问题

问题一:HDMI不能热插拔问题 现象 rk3588在开发时现在发现只能在插入HDMI时上电才能输出信号,而当开机之后,再插入HDMI显示器则无信号。 分析 通过kernel显示,在开机后,插拔HMDI是有log提示的,说明内核能够检测到HDMI的插拔动作。 首先先排查软件问题,尝试重启显示进…

ssm项目配置,不再支持源选项 5。请使用 6 或更高版本。 不再支持目标选项 1.5。请使用 1.6 或更高版本。

ssm项目启动报错&#xff1a; 不再支持源选项 5。请使用 6 或更高版本。 不再支持目标选项 1.5。请使用 1.6 或更高版本 1.模块语言级别 2.设置模块目标字节码版本 3.pom文件指定jdk版本 <properties><project.build.soutceEncoding>UTF-8</project.build.sout…

SpringBoot3自动配置流程 SPI机制 核心注解 自定义starter

1. 自动配置流程 导入starter依赖导入autoconfigure寻找类路径下 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件启动&#xff0c;加载所有 自动配置类 xxxAutoConfiguration 给容器中配置功能组件组件参数绑定到 属性类中。xxxPrope…

运维高级学习---MySQL主从复制

MySQL内建的复制功能是构建大型&#xff0c;高性能应用程序的基础 通过将MySQL的某一台主机 (master)的数据复制到其他主机(slaves)上&#xff0c;并重新执行一遍来执行复制过程中一台服务器充当主服务器&#xff0c;而其他一个或多个其他服务器充当从服务器 为什么要做主从复…

用eNSP搭建一个最简单的网络系统

要求搭建如下网络系统&#xff1a; 相关知识&#xff1a; 路由器命令界面&#xff1a; 所有的设备进入后均名字为Huawai&#xff1b; < >代表了当下所在的配置模式&#xff1b; 不同模式具有不同的管理权限&#xff0c;可以完成不同的配置要求&#xff1b; 第一级模式 …

Excel 端口操作指南

通过将 EDI 报文可视化为 Excel&#xff0c;企业可以更好地了解和处理数据&#xff0c;提高工作效率&#xff0c;减少错误率。在未实现 EDI 系统和内部业务系统集成之前&#xff0c;Excel 方案则是一项可供选择的临时替代方案。 Excel方案的优点在于&#xff0c;无需对业务系统…

【深度学习笔记】随机梯度下降法

本专栏是网易云课堂人工智能课程《神经网络与深度学习》的学习笔记&#xff0c;视频由网易云课堂与 deeplearning.ai 联合出品&#xff0c;主讲人是吴恩达 Andrew Ng 教授。感兴趣的网友可以观看网易云课堂的视频进行深入学习&#xff0c;视频的链接如下&#xff1a; 神经网络和…

Qt图片编辑 - 在直线添加文字

在绘制一条直线时&#xff0c;比如说在直线中间输出文字&#xff0c;如下图所示 本质上不难&#xff0c;定位到位置&#xff0c;然后drawText就可以了 难就难在 文字要跟随线的斜率&#xff0c;例如 还有&#xff0c;文字最好保证在线的“上方” 首先是角度问题 这个角度跟线…

C#WinForm获取当前活动子窗体使用鼠标滚轮事件改变窗体大小

获取当前活动子窗体使用鼠标滚轮事件改变窗体大小&#xff0c;实例在文末&#xff0c;可下载。 这个主要分三个重点 第一步 我们需要让子窗体显示在父窗体中 Form22 new Form2(); Form22.TopLevel false; // 不是顶级窗体 //Form22.Parent this;// 设置父窗体 一定不要…

索引使用——SQL提示、覆盖索引、回表查询

1. SQL提示 use index是给MySQL一个提示&#xff0c;在执行的时候尽量使用该索引&#xff0c;至于MySQL最后会不会接收该建议&#xff0c;则不一定。 ignore index是mysql忽略某个索引。 force index则强制mysql使用该索引。mysql别无选择。 2.覆盖索引 覆盖索引和回表查…

MQ消息介绍

1、同步通讯 立即发出&#xff0c;立即回复。 同步通讯过程中&#xff0c;若有消息失败&#xff0c;一直重试&#xff0c;会造成阻塞&#xff0c;影响其它功能。 优点&#xff1a;时效性高 2、异步通讯 3、什么是MQ 稳定性、可用性、并发性极为重要。 MQ&#xff1a;消息即…

RocketMQ教程-(4)-领域模型-消费者(Consumer)

本文介绍 Apache RocketMQ 中消费者&#xff08;Consumer&#xff09;的定义、模型关系、内部属性、行为约束、版本兼容性及使用建议。 定义​ 消费者是 Apache RocketMQ 中用来接收并处理消息的运行实体。 消费者通常被集成在业务系统中&#xff0c;从 Apache RocketMQ 服务…

钉钉和MySQL接口打通对接实战

钉钉和MySQL接口打通对接实战 对接系统钉钉 钉钉&#xff08;DingTalk&#xff09;是阿里巴巴集团专为中国企业打造的免费沟通和协同的多端平台&#xff0c;提供PC版&#xff0c;Web版和手机版&#xff0c;有考勤打卡、签到、审批、日志、公告、钉盘、钉邮等强大功能。 目标系统…