Linked List & List Node All In One

链表 & 节点

链表类型

  1. 单链表
  2. 双链表
  3. 环形链表 / 循环链表

Singly Linked List (Uni-directional)

Doubly Linked List (Bi-directional)

Circular Linked List

js 实现 Linked List


  1. "use strict";
  2. /**
  3. *
  4. * @author xgqfrms
  5. * @license MIT
  6. * @copyright xgqfrms
  7. * @created 2020-11-17
  8. * @modified
  9. *
  10. * @description 链表 & 节点
  11. * @difficulty Easy Medium Hard
  12. * @complexity O(n)
  13. * @augments
  14. * @example
  15. * @link
  16. * @solutions
  17. *
  18. * @best_solutions
  19. *
  20. */
  21. const log = console.log;
  22. // 节点
  23. function ListNode(val, next) {
  24. this.val = 0 || val;
  25. this.next = null || next;
  26. }
  27. // 链表
  28. function LinkedList(value) {
  29. const node = new ListNode(value, ``);
  30. if(!head) {
  31. head = node;
  32. } else {
  33. let current = head;
  34. while(current.next) {
  35. current = current.next;
  36. }
  37. current.next = node;
  38. }
  39. };
  1. function LinkedList () {
  2. // init & 闭包 closure
  3. let length = 0;
  4. let head = null;
  5. // methods
  6. this.append = function(value) {
  7. const node = new ListNode(value, ``);
  8. if(!head) {
  9. head = node;
  10. } else {
  11. let current = head;
  12. while(current.next) {
  13. current = current.next;
  14. }
  15. current.next = node;
  16. }
  17. // log(`head =\n`, head)
  18. length += 1;
  19. }
  20. this.getList = function() {
  21. // log(`head =`, head)
  22. return head;
  23. }
  24. }
  25. const test = new LinkedList();
  26. test.append(1);
  27. test.append(2);
  28. // test.append(3);
  29. reverseList(test.getList())
  30. /*
  31. head = ListNode { val: 1, next: ListNode { val: 2, next: ListNode { val: 3, next: '' } } }
  32. */

反转链表

https://leetcode.com/problems/reverse-linked-list/


  1. /**
  2. * Definition for singly-linked list.
  3. * function ListNode(val) {
  4. * this.val = val;
  5. * this.next = null;
  6. * }
  7. */
  8. /**
  9. * @param {ListNode} head
  10. * @return {ListNode}
  11. */
  12. var reverseList = function(head) {
  13. let [prev, curr] = [null, head];
  14. while (curr) {
  15. let tmp = curr.next; // 1. 临时存储当前指针后续内容
  16. curr.next = prev; // 2. 反转链表
  17. prev = curr; // 3. 接收反转结果
  18. curr = tmp; // 4. 接回临时存储的后续内容
  19. }
  20. return prev;
  21. };

  1. var reverseList = function(head) {
  2. let [prev, curr] = [null, head];
  3. while (curr) {
  4. // swap
  5. [curr.next, prev, curr] = [prev, curr, curr.next];
  6. }
  7. return prev;
  8. };

refs

https://www.educative.io/edpresso/what-is-a-linked-list

https://people.engr.ncsu.edu/efg/210/s99/Notes/LinkedList.1.html

PPT

https://www.slideshare.net/sshinchan/single-linked-list



xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


Linked List & List Node All In One的更多相关文章

  1. [LeetCode] Linked List Random Node 链表随机节点

    Given a singly linked list, return a random node's value from the linked list. Each node must have t ...

  2. Leetcode 382. Linked List Random Node

    本题可以用reservoir sampling来解决不明list长度的情况下平均概率选择元素的问题. 假设在[x_1,...,x_n]只选一个元素,要求每个元素被选中的概率都是1/n,但是n未知. 其 ...

  3. 382. Linked List Random Node

    Given a singly linked list, return a random node's value from the linked list. Each node must have t ...

  4. [Swift]LeetCode382. 链表随机节点 | Linked List Random Node

    Given a singly linked list, return a random node's value from the linked list. Each node must have t ...

  5. Reservoir Sampling-382. Linked List Random Node

    Given a singly linked list, return a random node's value from the linked list. Each node must have t ...

  6. [LeetCode] 382. Linked List Random Node ☆☆☆

    Given a singly linked list, return a random node's value from the linked list. Each node must have t ...

  7. Linked List Random Node -- LeetCode

    Given a singly linked list, return a random node's value from the linked list. Each node must have t ...

  8. [LeetCode] 382. Linked List Random Node 链表随机节点

    Given a singly linked list, return a random node's value from the linked list. Each node must have t ...

  9. 【LeetCode】382. Linked List Random Node 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 数组保存再随机选择 蓄水池抽样 日期 题目地址:ht ...

随机推荐

  1. vercel是什么神仙网站?

    Vercel? vercel是我用过的最好用的网站托管服务.本网站就是基于hexo引擎模板开发,托管在vercel上的. vercel类似于github page,但远比github page强大,速 ...

  2. 3、剑指offer-数组——数组中重复的数字

    *题目描述* **在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输 ...

  3. .NET5 它来了!微软大一统时代来临!

    今天双11,Microsoft released.NET 5(在他们的开发博客上同时发布).新版本的重点是改进.NET Core 3.1: 更小的单文件应用程序.对 Windows ARM64的支持以 ...

  4. Urlrewrite

    Urlrewrite  地址重写,用户得到的全部都是经过处理后的URL地址 过滤用户的所有请求,符合规则的便对其进行重定向 rule结点中from默认使用的正则表达式来匹配,若用户访问服务器时的URL ...

  5. 数据分析中常用的Excel函数

    数据分析中excel是一个常见且基础的数据分析工具,要想掌握好它,学会使用其中的常用函数是一个绕不过去的坎.从网上搜集的资料来说,基本上确定了数据分析中Excel的常用函数有以下这六类 数学函数:SU ...

  6. Python 中 sorted 如何自定义比较逻辑

    在 Python 中对一个可迭代对象进行排序是很常见的一个操作,一般会用到 sorted() 函数 num_list = [4, 2, 8, -9, 1, -3] sorted_num_list = ...

  7. Stream API处理集合

    使用流来遍历集合 简介 如何工作 总结 从集合或数组创建流 简介 如何工作 结论 聚合流的值 简介 如何工作 结论 转载 使用流来遍历集合 简介: Java的集合框架,如List和Map接口及Arra ...

  8. 设计模式c++(3)——观察者模式

    观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖着都会收到通知并自动更新. 当两个对象之间松耦合,他们依然可以交互,但是不太清楚彼此的细节.观察者模式提供了一种对象设 ...

  9. form(form基础、标签渲染、错误显示 重置信息、form属性、局部钩子、全局钩子)

    form基础 Django中的Form使用时一般有两种功能: 1.生成html标签 2.验证输入内容 要想使用django提供的form,要在views里导入form模块 from django im ...

  10. mysql-mysqli_fetch_all(错误)

    mysql-mysqli_fetch_all(错误) 问题:使用mysql-mysqli_fetch_all获取返回的数组时失败/报错 原因及解决方法: mysqli_fetch_all函数只存在于m ...