原题链接:数据结构-链表的基本操作
删除链表的逻辑希望再丰富下,这个链表隐含的规律放在题中,感觉不太好,而且测试用例中是有delete操作的
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
static int maxSize = 11;
static String[][] space = new String[maxSize][2];
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
List<String> input = new ArrayList<>();
// 保存输入
while (scanner.hasNext()) {
input.add(scanner.nextLine());
}
scanner.close();
// 初始化
initSpace();
// 处理指令
for (int i = 0; i < input.size(); i++) {
update(input.get(i));
}
}
/**
* 初始化链表
*/
static void initSpace() {
for (int i = 0; i < maxSize; i++) {
space[i] = new String[] { "", String.valueOf(i + 1) };
}
space[maxSize - 1][1] = "0";
// 空白节点下标
space[0][1] = "2";
// 第一节点下标
space[1][1] = "0";
}
/**
* 在静态链表中查找元素在space中的位置(相当于地址)
*
* @param e
*/
static void locate(String e) {
int i = 1;
while (i != 0 && !space[i][0].equals(e)) {
i = Integer.valueOf(space[i][1]);
}
System.out.println(String.format("%2d\n********************", i));
}
/**
* 给静态链表中的结点分配存储空间,实际上返回的是数组中可用的结点下标
*
* @return
*/
static int malloc() {
int i = Integer.valueOf(space[0][1]);
if (i != 0) {
space[0][1] = space[i][1];
}
return i;
}
/**
* 释放静态链表中结点的存储空间
*
* @param k
*/
static void free(int k) {
space[k][1] = space[0][1];
space[0][1] = String.valueOf(k);
}
/**
* 处理指令
*
* @param commandLine
*/
static void update(String commandLine) {
String[] split = commandLine.split(" ");
String command = split[0];
switch (command) {
case "search":
locate(split[1]);
break;
case "insert":
insert(Integer.valueOf(split[1]), split[2]);
break;
case "delete":
delete(Integer.valueOf(split[1]));
break;
case "show":
show();
break;
default:
break;
}
}
/**
* 删除
*
* @param poi
*/
static void delete(int poi) {
int cur = 1;
int delCur;
for (int j = 0; j < poi - 1; j++) {
cur = Integer.valueOf(space[cur][1]);
}
delCur = Integer.valueOf(space[cur][1]);
space[cur][1] = space[delCur][1];
free(delCur);
}
/**
* 插入方法
*
* @param poi
* @param element
*/
static void insert(int poi, String element) {
int cur = 1;
int newCur;
for (int j = 0; j < poi - 1; j++) {
cur = Integer.valueOf(space[cur][1]);
}
newCur = malloc();
space[newCur] = new String[] { element, space[cur][1] };
space[cur][1] = String.valueOf(newCur);
}
/**
* 展示方法
*/
static void show() {
for (int i = 0; i < maxSize; i++) {
System.out.println(String.format("%-8s%2s", space[i][0], space[i][1]));
}
System.out.println("********************");
}
}
7.3 分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复