删除链表的逻辑希望再丰富下,这个链表隐含的规律放在题中,感觉不太好,而且测试用例中是有delete操作的

  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import java.util.Scanner;
  4. public class Main {
  5. static int maxSize = 11;
  6. static String[][] space = new String[maxSize][2];
  7. public static void main(String[] args) throws Exception {
  8. Scanner scanner = new Scanner(System.in);
  9. List<String> input = new ArrayList<>();
  10. // 保存输入
  11. while (scanner.hasNext()) {
  12. input.add(scanner.nextLine());
  13. }
  14. scanner.close();
  15. // 初始化
  16. initSpace();
  17. // 处理指令
  18. for (int i = 0; i < input.size(); i++) {
  19. update(input.get(i));
  20. }
  21. }
  22. /**
  23. * 初始化链表
  24. */
  25. static void initSpace() {
  26. for (int i = 0; i < maxSize; i++) {
  27. space[i] = new String[] { "", String.valueOf(i + 1) };
  28. }
  29. space[maxSize - 1][1] = "0";
  30. // 空白节点下标
  31. space[0][1] = "2";
  32. // 第一节点下标
  33. space[1][1] = "0";
  34. }
  35. /**
  36. * 在静态链表中查找元素在space中的位置(相当于地址)
  37. *
  38. * @param e
  39. */
  40. static void locate(String e) {
  41. int i = 1;
  42. while (i != 0 && !space[i][0].equals(e)) {
  43. i = Integer.valueOf(space[i][1]);
  44. }
  45. System.out.println(String.format("%2d\n********************", i));
  46. }
  47. /**
  48. * 给静态链表中的结点分配存储空间,实际上返回的是数组中可用的结点下标
  49. *
  50. * @return
  51. */
  52. static int malloc() {
  53. int i = Integer.valueOf(space[0][1]);
  54. if (i != 0) {
  55. space[0][1] = space[i][1];
  56. }
  57. return i;
  58. }
  59. /**
  60. * 释放静态链表中结点的存储空间
  61. *
  62. * @param k
  63. */
  64. static void free(int k) {
  65. space[k][1] = space[0][1];
  66. space[0][1] = String.valueOf(k);
  67. }
  68. /**
  69. * 处理指令
  70. *
  71. * @param commandLine
  72. */
  73. static void update(String commandLine) {
  74. String[] split = commandLine.split(" ");
  75. String command = split[0];
  76. switch (command) {
  77. case "search":
  78. locate(split[1]);
  79. break;
  80. case "insert":
  81. insert(Integer.valueOf(split[1]), split[2]);
  82. break;
  83. case "delete":
  84. delete(Integer.valueOf(split[1]));
  85. break;
  86. case "show":
  87. show();
  88. break;
  89. default:
  90. break;
  91. }
  92. }
  93. /**
  94. * 删除
  95. *
  96. * @param poi
  97. */
  98. static void delete(int poi) {
  99. int cur = 1;
  100. int delCur;
  101. for (int j = 0; j < poi - 1; j++) {
  102. cur = Integer.valueOf(space[cur][1]);
  103. }
  104. delCur = Integer.valueOf(space[cur][1]);
  105. space[cur][1] = space[delCur][1];
  106. free(delCur);
  107. }
  108. /**
  109. * 插入方法
  110. *
  111. * @param poi
  112. * @param element
  113. */
  114. static void insert(int poi, String element) {
  115. int cur = 1;
  116. int newCur;
  117. for (int j = 0; j < poi - 1; j++) {
  118. cur = Integer.valueOf(space[cur][1]);
  119. }
  120. newCur = malloc();
  121. space[newCur] = new String[] { element, space[cur][1] };
  122. space[cur][1] = String.valueOf(newCur);
  123. }
  124. /**
  125. * 展示方法
  126. */
  127. static void show() {
  128. for (int i = 0; i < maxSize; i++) {
  129. System.out.println(String.format("%-8s%2s", space[i][0], space[i][1]));
  130. }
  131. System.out.println("********************");
  132. }
  133. }
点赞(0)
 

7.3 分

1 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论