首页 > 其他分享 >数据结构(一)单链表---以题为例

数据结构(一)单链表---以题为例

时间:2024-02-05 13:34:05浏览次数:17  
标签:链表 head 单链 idx int ne --- 插入 数据结构

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

  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

#include<iostream>
using namespace std;
const int N=100010;
int head,idx,ne[N],e[N];

void init(){
    head =-1;
    idx=0;
}

void add_to_head(int x){
    e[idx]=x,ne[idx]=head,head=idx++;
}

void add(int k,int x){
    e[idx]=x,ne[idx]=ne[k],ne[k]=idx++;
}

void remove(int k){
    ne[k]=ne[ne[k]];
}

int main(){
    int m;
    cin>>m;
    init();
    while(m--){
        char op;
        cin>>op;
        if(op=='H'){
            int x;
            cin>>x;
            add_to_head(x);
        }
        else if(op=='D'){
            int k;
            cin>>k;
            if(!k)head=ne[head];
            else remove(k-1);
        }
        else{
            int k,x;
            cin>>k>>x;
            add(k-1,x);
        }
    }
    for(int i =head;i!=-1;i=ne[i])cout<<e[i]<<" ";
    return 0;
}

 

 

标签:链表,head,单链,idx,int,ne,---,插入,数据结构
From: https://www.cnblogs.com/Ghost-Knight/p/18007792

相关文章

  • 使用react-dnd实现表格之间互相拖拽
    /**引用immutability-helper轮子中的update;意为:在不改变原始来源的情况下改变数据副本*/1importReact,{Component}from'react';2import{DndProvider,useDrag,useDrop}from'react-dnd';3importHTML5Backendfrom'react-dnd-html5-backend......
  • 无涯教程-toLocaleDateString()函数
    JavascriptdatetoLocaleDateString()方法根据本地时间格式,把Date对象的日期部分转换为字符串。toLocaleDateString()-语法Date.toLocaleString()toLocaleDateString()-返回值使用操作系统的区域设置约定返回"Date"部分。toLocaleDateString()-示例vardt=......
  • Docker容器第三课:企业级应用部署-实战
    一、docker容器化部署企业级应用1.1使用容器化部署企业级应用必要性1.有利于快速实现企业级应用部署2.有利于实现企业级应用恢复1.2Docker参考资料官方网站 http://hub.docker.com/二、docker安装部署系统环境:CentOS72.1安装前准备工作查看内核版本是否大于3.10[jack@TEST~]#u......
  • 酷睿第14代i5-14400评测:性能与上代一致
    一、前言:酷睿第14代i5-14400低调上市由于初代Intel4制程工艺不论是频率还是功耗都无法满足顶级桌面处理器的需求,这就导致了酷睿第14代处理器依然沿用Intel7制程工艺,架构也没有变化,只是频率有一些提升。在i9-14900K上市3个月之后,面向主流玩家的酷睿第14代i5-14400处理器终于来......
  • 洛谷题单指南-递推与递归-P1044 [NOIP2003 普及组] 栈
    原题链接:https://www.luogu.com.cn/problem/P1044题意解读:一组数入栈、出栈的方案数,如果了解卡特兰数,此题可以秒杀;如果不了解,也可以通过递归或者递推来解决;最次,可以通过DFS暴搜出方案数,当然对于n个数,一共有n次入栈、n次出栈,一共2n次,每次要么入栈要么出栈,总搜索次数在22n规模,n最......
  • 期权认购合约-买方策略
    最近将期权认购合约的买卖方策略分析了比较多的内容。本篇对买方策略进行总结。该策略可简单描述为:通过长期持有合适杠杆率、合适的综合成本的期权认购合约,来达到牛市跟踪指数涨跌的效果。为了节约成本(负Alpha),我们需要对所有期权的综合Alpha进行测算。并同时与期货策略对比,了......
  • Ubuntu下docker以及docker-compose安装
    Ubuntu下docker以及docker-compose安装Docker//使用官方脚本自动安装curl-fsSLhttps://test.docker.com-oget-docker.shsudoshget-docker.sh如果要使用Docker作为非root用户,则应考虑使用类似以下方式将用户添加到docker组:$sudousermod-aGdockeryour-user......
  • 无涯教程-todatestring()函数
    JavaScriptdatetoDateString()方法 把Date对象的日期部分转换为字符串。todatestring()-语法Date.toDateString()todatestring()-返回值以人类可读的形式返回Date对象的日期部分。todatestring()-示例vardt=newDate(1993,6,28,14,39,7);consol......
  • Shiro-00-shiro 概览
    RBACRBCARBCAzh_CNShiroApacheShiro是一个强大且易于使用的Java安全框架,负责执行身份验证、授权、加密和会话管理。通过Shiro的易于理解的API,您可以快速而轻松地保护任何应用程序,从最小的移动应用到最大的Web和企业应用。Shiro提供了应用程序安全API,用于执行......
  • Flower - 周考期间疯话
    使用高级电脑的高级Typora在高级考试中写出的高级文字。AmIdestinedtofall?Codeasyouwant,failasyouexpect.如此生活三十年,直到大厦崩塌。Alsichkann.明月万年无前身,照见古今独醒人。Shemusthavebeenoutofherhead~Letitgo~Letitgo~喜报:想说Gx......