再谈前端算法,你这回明白了吗?( 二 )

获取Map的大?。?/h4>myMap.size; // 返回Map的大小更多详细内容,请微信搜索“前端爱好者“, 戳我 查看  。
算法实例 :求环状链表leecode的地址:https://leetcode.cn/problems/linked-list-cycle/
链表:常见 -- react源码

再谈前端算法,你这回明白了吗?

文章插图
图片
思路:快慢指针,两个(起点相同位置)指针,n步骤以后指针相遇
再谈前端算法,你这回明白了吗?

文章插图
图片
实现代码
head.next 指向下一个值
/** * @param {ListNode} head * @return {boolean} */var hasCycle = function(head) {let fast = slow = headwhile(fast && fast.next){fast = fast.next.nextslow = slow.nextif(fast === slow){return true}}return false};扩展:链表链表是一种数据结构,其中的元素以节点的形式按顺序排列 。
每个节点都包含数据和指向下一个节点的引用 。
相比数组,链表在插入和删除元素时更灵活,因为它们不需要连续的存储空间 。
举例来说 , 一个简单的链表可以被定义如下:
Node 1: 23 -> Node 2Node 2: 47 -> Node 3Node 3: 95 -> null在这个例子中,链表中的每个节点包含一个值和指向下一个节点的引用 。
第一个节点包含值23 , 同时指向第二个节点,依此类推 。最后一个节点指向null,表示链表的结束 。
通过使用链表,我们可以轻松地插入或删除节点,而无需移动其他节点 。
这使得链表在某些场景下比数组更为适用 。
链表是一种物理存储结构上 非连续、非顺序 的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。
链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成 。
每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域 。
链表有很多种不同的类型,包括单向链表、双向链表以及循环链表 。
链表可以在多种编程语言中实现,例如C、C++和JAVA等 。
算法实例 :二又树的前序、中序、后序遍历
再谈前端算法,你这回明白了吗?

文章插图
图片
前序遍历 - 根左右先走根节点,然后左,然后右
再谈前端算法,你这回明白了吗?

文章插图
图片
中序遍历 - 左根右先走左节点,然后根节点,然后右节点
再谈前端算法,你这回明白了吗?

文章插图
图片
后序遍历 - 左右根先走左节点,然后右节点,然后再根节点
再谈前端算法,你这回明白了吗?

文章插图
图片
举例
再谈前端算法,你这回明白了吗?

文章插图
图片
前/先序遍历: GDAFEMHZ 中序遍历: ADEFGHMZ 后序遍历: AEFDHZMG
再谈前端算法,你这回明白了吗?

文章插图
图片
前序遍历: A-B-D-F-G-H-I-E-C 中序遍历: F-D-H-G-I-B-E-A-C 后序遍历: F-H-I-G-D-E-B-C-A
实现代码const treeRoot = {val: 1,left: {val: 2,left: {val: 4,},right: {val: 5,}},right: {val: 3,left: {val: 6,},right: {val: 7,}}}// 前序const preOrder = function(node){if(node){// 如果有根节点console.log(node.val)preOrder(node.left)preOrder(node.right)}}preOrder(treeRoot)// 中序const inOrder = function(node){if(node){// 如果有根节点inOrder(node.left)console.log(node.val)inOrder(node.right)}}inOrder(treeRoot)// 后序const nextOrder = function(node){if(node){// 如果有根节点nextOrder(node.left)nextOrder(node.right)console.log(node.val)}}nextOrder(treeRoot)(二叉树)层序遍历leetcode地址:https://leetcode.cn/problems/binary-tree-level-order-traversal/
再谈前端算法,你这回明白了吗?

文章插图
图片
输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]
/** * @param {TreeNode} root * @return {number[][]} */var levelOrder = function(root) {if(!root) return []let queue = [root]let result = []// 开始遍历while(queue.length){let temQueue = []let temResult = []let len = queue.lengthfor(let i = 0; i < len; i++){let node = queue.shift()temResult.push(node.val)node.left && temQueue.push(node.left)node.right && temQueue.push(node.right)}// 循环完毕result.push(temResult)temResult = []queue = temQueue}return result};(二叉树)的层级leetcode地址:https://leetcode.cn/problems/maximum-depth-of-binary-tree/


推荐阅读