小说阅读网站开发源码,黄金网站app大全,做色流网站要注意什么,开发一个项目的流程✨个人主页#xff1a;bit me ✨当前专栏#xff1a;算法基础 #x1f525;专栏简介#xff1a;该专栏主要更新一些基础算法题#xff0c;有参加蓝桥杯等算法题竞赛或者正在刷题的铁汁们可以关注一下#xff0c;互相监督打卡学习 #x1f339; #x1f339; #x1f3… ✨个人主页bit me ✨当前专栏算法基础 专栏简介该专栏主要更新一些基础算法题有参加蓝桥杯等算法题竞赛或者正在刷题的铁汁们可以关注一下互相监督打卡学习 单 链 表 实现一个单链表链表初始为空支持三种操作
向链表头插入一个数删除第 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 思路 第一个操作删除头结点我们可以直接弄一个第三方然后轮流转移赋值即可前面链表文章写了很多第二步和第一步一样的操作第三个操作就直接让他等于下一个节点就行 向链表头插入一个数
public static void add_head(int x){e[index] x;ne[index] head;head index;
}删除第 k 个插入的数后面的数
public static void remove(int k){ne[k] ne[ne[k]];
}在第 k 个插入的数后插入一个数。
public static void add(int k,int x){e[index] x;ne[index] ne[k];ne[k] index;
}主函数对他们的分类操作
public static void main(String[] args){Scanner scan new Scanner(System.in);int m scan.nextInt();init();//初始化while(m -- 0){//因为java中没有输入一个字符所以用字符串转字符String s scan.next();char op s.charAt(0);if(op H){int x scan.nextInt();add_head(x);}else if(op D){int k scan.nextInt();if(k 0) head ne[head];else remove(k-1);}else {int k scan.nextInt();int x scan.nextInt();add(k-1,x);}}for(int i head;i ! -1;i ne[i] ){System.out.print(e[i] );}}附上总的代码
public class Demo3 {static int[] e new int[100010];static int[] ne new int[100010];static int index,head;public static void init(){index 0;head -1;}//H向链表头插入一个数xpublic static void add_head(int x){e[index] x;ne[index] head;head index;}//I在第k位数后面插入一个数xpublic static void add(int k,int x){e[index] x;ne[index] ne[k];ne[k] index;}//D删除第k个数后面得数public static void remove(int k){ne[k] ne[ne[k]];}public static void main(String[] args){Scanner scan new Scanner(System.in);int m scan.nextInt();init();//初始化while(m -- 0){//因为java中没有输入一个字符所以用字符串转字符String s scan.next();char op s.charAt(0);if(op H){int x scan.nextInt();add_head(x);}else if(op D){int k scan.nextInt();if(k 0) head ne[head];else remove(k-1);}else {int k scan.nextInt();int x scan.nextInt();add(k-1,x);}}for(int i head;i ! -1;i ne[i] ){System.out.print(e[i] );}}
}