image.png

    append() 在链表后添加节点

    1. // 定义链表
    2. // 同样使用 ES6 class 和立即执行函数
    3. let LinkedList = (function() {
    4. // 定义一个链表
    5. class Node {
    6. // 初始化链表
    7. constructor(element) {
    8. this.element = element;
    9. this.next = null;
    10. }
    11. }
    12. // 定义链表初始化值
    13. let length = new WeakMap(); // 初始时,链表的长度
    14. let head = new WeakMap(); // 初始时, 链表的头部
    15. // 返回的链表
    16. return class LinkedList {
    17. constructor() {
    18. // 初始化
    19. length.set(this, 0);
    20. head.set(this, null);
    21. }
    22. // 链表的方法
    23. // append 在链表最后添加节点
    24. append(element) {
    25. // 创建节点
    26. let node = new Node(element),
    27. // 声明一个变量, 用于获取链表的位置
    28. current;
    29. // 判断链表是否有数据
    30. if (this.getHeader() === null) {
    31. // 当链表为空的情况下
    32. head.set(this, node); // 直接添加
    33. } else {
    34. // 链表头部不为空
    35. // 找到链表最末的节点, 让最末的节点的 next 指向添的node
    36. current = this.getHeader(); // 获取 head
    37. // 判断当前节点的next存在
    38. while (current.next) {
    39. // next ++ ,一直循环
    40. current = current.next;
    41. }
    42. // 进行while循环完后,current 就为最后的节点。
    43. // 然后进行赋值
    44. current.next = node;
    45. // 赋值后,让链表长度 +1
    46. // 使用size获取链表的长度
    47. let l = this.size();
    48. l++; // 让链表的长度加一
    49. length.set(this, l); // 重新赋值
    50. // 追加后,返回head, 查看head
    51. console.log(this.getHeader());
    52. }
    53. }
    54. // 判断链表的头部
    55. getHeader() {
    56. return head.get(this);
    57. }
    58. // 返回链表的长度
    59. size() {
    60. return length.get(this);
    61. }
    62. }
    63. })();
    64. let list = new LinkedList();
    65. list.append(0);
    66. list.append(1);
    67. list.append(2);
    68. list.append(3);
    69. /*
    70. * 输出this.getHeader() 能够查看到链表的情况
    71. */

    append.png

    输出结果
    image.png