![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
链表
Celine-Coding
Keep moving, stay kind.
展开
-
剑指 Offer 62. 圆圈中最后剩下的数字 -- 约瑟夫环
约瑟夫问题是一个著名的问题:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。 例如只有三个人,把他们叫做A、B、C,他们围成一圈,从A开始报数,假设报2的人被杀掉: 从A开始报数,他报1; 然后轮到B报数,他报2,被杀掉; 接着从C开始新一轮的报数,他报1; 接着又到了A,报2,被杀; 最后剩下C,C胜利。 本题也是这个思路,从0~n-1围城一个圈,从0开始计数,到第m个数字删除,求剩下的数字。 ...转载 2022-03-09 19:02:05 · 76 阅读 · 0 评论 -
剑指 offer35. 复杂链表的复制 -- JavaScript解法
题目要求 思路分析 用哈希表表示映射关系:键是原节点,值是复制的节点。 第一次遍历链表,复制每个节点和 next 指针,并且保存原节点-〉复制节点的映射关系; 第二次遍历,通过哈希表获得节点对应的复制节点,更新random指针; Code part var copyRandomList = function(head) { let p = head; let map = new Map(); while(p){ map.set(p,new Node(p.val)) //用map来保存原创 2022-03-08 17:39:11 · 461 阅读 · 0 评论 -
剑指 offer27.回文链表 -- JavaScript解法
题目描述 思路 利用栈后进先出的特性,把链表所有元素入栈,再出栈,与链表节点一一对比,如果是回文链表,对比元素则相同,否则不是回文链表。 步骤 新建栈; 链表所有元素入栈; 栈顶元素依次出栈跟链表元素比较; 所有元素相同,return true,否则 return false。 Code part var isPalindrome = function(head) { if(!head) return true; const stack = []; let p = head; let原创 2022-03-08 13:05:04 · 787 阅读 · 0 评论 -
剑指 offer22. 链表中倒数第k个节点 -- JavaScript解法
题目要求 思路 这道题可以用快慢指针的思路。快指针先走k步,之后快慢指针同步走,当快指针到链表最后一个节点时,慢指针正好在倒数第k个节点,因为两个指针始终相差k步,所以,慢–快之间的节点即为相差的k的元素; 步骤 定义快慢指针p1、p2; 快指针先走k步,定义变量记录走的步数,快指针走完k步后,快慢指针同步走,直到快指针走到最后一个节点; 注意,最后返回p1即可。 Code part var getKthFromEnd = function(head, k) { let p1 = head,p2原创 2022-03-06 18:13:24 · 410 阅读 · 0 评论