insert() 方法 , 在链表特定位置添加节点

    实现代码

    1. // 返回的链表
    2. return class LinkedList {
    3. constructor() {
    4. // 初始化, 当前的链表
    5. length.set(this, 0); // 长度为0
    6. head.set(this, null); // 头部数据为 null
    7. }
    8. // 链表的方法
    9. // append 在链表最后添加节点
    10. append(element) {
    11. // 创建节点
    12. let node = new Node(element),
    13. // 声明一个变量,用于保存链表的头部数据
    14. current;
    15. // 判断链表是否有数据
    16. if (this.getHeader() === null) {
    17. // 当链表为空的情况下
    18. head.set(this, node); // 直接添加
    19. } else {
    20. // 链表头部不为空
    21. // 找到链表最末的节点, 让最末的节点的 next 指向添的node
    22. current = this.getHeader(); // 获取当前的head
    23. // 判断当前节点的next存在
    24. while (current.next) {
    25. // next ++ ,一直循环
    26. current = current.next;
    27. }
    28. // 进行while循环完后,current 就为最后的节点。
    29. // 然后进行赋值
    30. current.next = node;
    31. // 赋值后,让链表长度 +1
    32. // 使用size获取链表的长度
    33. let l = this.size();
    34. l++; // 让链表的长度加一
    35. length.set(this, l); // 重新赋值
    36. }
    37. }
    38. // 在链表任何位置插入数据
    39. insert(position, element) {
    40. // position : 链表的位置
    41. // element : 插入的节点数据
    42. // 判断当前链表
    43. if (position >= 0 && position <= this.size()) {
    44. // 创建节点
    45. let node = new Node(element),
    46. // 使用current 保存到获取链表的头部
    47. current = this.getHeader(),
    48. index = 0,
    49. previous;
    50. // 判断链表
    51. if (position === 0) {
    52. // 表示在链表的头部插入数据
    53. node.next = current; // 将初始的链表的指针设置为新创建的node
    54. head.set(this, node); // 链表赋值
    55. } else {
    56. // 表示插入的节点在某一个节点前
    57. while (index++ < position) {
    58. previous = current;
    59. current = current.next;
    60. }
    61. // 将它们的next() 指向另一个node
    62. node.next = current;
    63. previous.next = node;
    64. }
    65. // 让length ++
    66. // 使用size获取链表的长度
    67. let l = this.size();
    68. l++; // 让链表的长度加一
    69. length.set(this, l); // 重新赋值
    70. // 追加后,返回head, 查看head
    71. console.log(this.getHeader()); // 返回是否插入成功
    72. return true;
    73. } else {
    74. // 插入不成功
    75. return false;
    76. }
    77. }
    78. // 判断链表的头部
    79. getHeader() {
    80. return head.get(this);
    81. }
    82. // 返回链表的长度
    83. size() {
    84. return length.get(this);
    85. }
    86. }
    87. // 实例化输出
    88. let list = new LinkedList();
    89. list.append(0);
    90. list.append(1);
    91. list.append(2);
    92. list.append(3);
    93. // insert方法的实现和数组的插入方法一样
    94. // var arr = [0, 1, 2, 3, 4];
    95. // arr.splice(2, 0, 1.5);
    96. // console.log(arr);
    97. console.log(list.insert(2, 1.5)); // 2: 插入的位置, 1.5 插入的数据

    insert.png

    输出结果

    image.png