代码实现

  1. package com.xiaoxuanfeng.dataStructure;
  2. // 链表
  3. public class Day4_Linked {
  4. // 链表节点
  5. public static class Node {
  6. int data;
  7. Node next;
  8. public Node(int data) {
  9. this.data = data;
  10. }
  11. }
  12. // 头节点指针
  13. private static Node head;
  14. // 尾节点指针
  15. private static Node last;
  16. // 链表实际长度
  17. private static int size;
  18. // 插入操作 data: 插入的元素 index: 插入的位置
  19. public void insert(int data, int index) {
  20. if (index < 0 || index > size) {
  21. throw new IndexOutOfBoundsException("下标越界");
  22. }
  23. Node insertNode = new Node(data);
  24. if (size == 0) { // 空链表
  25. head = insertNode;
  26. last = insertNode;
  27. } else if (index == 0) { // 插入头部
  28. insertNode.next = head;
  29. head = insertNode;
  30. } else if (size == index) { // 插入尾部
  31. last.next = insertNode;
  32. last = insertNode;
  33. } else { // 插入中间
  34. Node prevNode = getNode(index - 1);
  35. insertNode.next = prevNode.next;
  36. prevNode.next = insertNode;
  37. }
  38. size++;
  39. }
  40. // 删除操作 index: 删除的位置
  41. public static Node remove(int index) {
  42. if (index < 0 || index > size) {
  43. throw new IndexOutOfBoundsException("数组越界");
  44. }
  45. Node removeNode = null;
  46. if (index == 0) { // 删除头节点
  47. removeNode = head;
  48. head = head.next;
  49. } else if (index == size - 1) { // 删除尾节点
  50. Node prevNode = getNode(index - 1);
  51. removeNode = prevNode.next;
  52. prevNode.next = null;
  53. last = prevNode;
  54. } else { // 删除中间节点
  55. Node prevNode = getNode(index - 1);
  56. Node nextNode = prevNode.next.next;
  57. removeNode = prevNode.next;
  58. prevNode.next = nextNode;
  59. }
  60. size--;
  61. return removeNode;
  62. }
  63. // 得到前置节点
  64. public static Node getNode(int index) {
  65. if (index < 0 || index > size) {
  66. throw new IndexOutOfBoundsException("数组越界");
  67. }
  68. Node temp = head;
  69. for (int i = 0; i < index; i++) {
  70. temp = temp.next;
  71. }
  72. return temp;
  73. }
  74. }