剑指 Offer 24. 反转链表
剑指 Offer 24. 反转链表
题目描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL
思路:通过prev固定反转后链表头,通过head来反转,通过next指向剩下的链表头部
代码:123456789101112131415161718192021222324252627 var reverseList = function(head) { // if(head==null||head.next==null) return head; // var prev=null; // var next=null; // while(head!=null){ // next=head.next; // head.next=prev; // prev=head; ...
剑指 Offer 54. 二叉搜索树的第k大节点
剑指 Offer 54. 二叉搜索树的第k大节点
题目描述:给定一棵二叉搜索树,请找出其中第k大的节点。
示例:
输入: root = [3,1,4,null,2], k = 1输出: 4
思路:二叉搜索树,若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;任意节点的左、右子树也分别为二叉查找树;所以采用中序遍历的方法,遍历后的结果就是从小到大顺序的结果
代码:1234567891011121314var kthLargest = function(root, k) { // 反中序遍历,记录数值到数组,获取第k -1 个 let arr = [] const midOrder = function(node) { if (node === null) { return } midOrder(node.right) arr.push(node.val) ...
剑指 Offer 06. 从尾到头打印链表
剑指 Offer 06. 从尾到头打印链表
题目描述:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例:
输入:head = [1,3,2]输出:[2,3,1]
思路:先将链表每个结点的值存入数组中,然后通过数组的reverse方法,即可从尾到头打印
代码:123456789101112var reversePrint = function(head) { let arr = []; while(head != null){ arr.push(head.val) head = head.next; } return arr.reverse(); //while(arr.length) { // result.push(arr.pop()) // } // return result};
剑指 Offer 05. 替换空格
剑指 Offer 05. 替换空格
题目描述:请实现一个函数,把字符串 s 中的每个空格替换成”%20”。
示例:
输入:s = “We are happy.”输出:”We%20are%20happy.”
思路:使用正则表达式 \s+代表多个空格 ?则表示取尽可能少的空格,然后通过replace函数替换为%20
代码:123var replaceSpace = function(s) { return s.replace(/\s+?/g,'%20')};
剑指 Offer 17. 打印从1到最大的n位数
剑指 Offer 17. 打印从1到最大的n位数
题目描述:输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
示例:
输入: n = 1输出: [1,2,3,4,5,6,7,8,9]
思路:最主要是要找出最大的那个数字,然后循环输出结果
代码:12345678var printNumbers = function(n) {let res = [];let max = Math.pow(10,n)-1;for(let i=1;i<=max;i++){res.push(i);}return res;};
剑指 Offer 22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点
题目描述:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。
示例:
给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.
思路:用两个指针,让第一个先走k步,然后两个指针一起移动,当第一个指针到最后一个节点处,第二个指针就在倒数第K个节点
代码:12345678910111213var getKthFromEnd = function (head, k) { let first = head, second = head; while (k !== 0) { first = first.next; k--; } while (first !== null) { first = ...
剑指 Offer 55 - I. 二叉树的深度
剑指 Offer 55 - I. 二叉树的深度
题目描述:输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
示例:
给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。
思路:递归求左子树和右子树深度,然后比较,最终返回最大值加1
代码:1234567let maxDepth = function(root) { if(root == null) return 0 let left = maxDepth(root.left); let right = maxDepth(root.right); return (left>right)?left+1:right+1};
剑指 Offer 27. 二叉树的镜像
剑指 Offer 27. 二叉树的镜像
题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像。
示例:
输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]
思路:先将根的左右节点互换,然后就是递归调用,对左右子树进行分别处理
代码:12345678910var mirrorTree = function(root) { if(!root){ return null; } [root.left,root.right] = [root.right,root.left] //递归处理左右子树 mirrorTree(root.left) mirrorTree(root.right) return root};
剑指 Offer 52. 两个链表的第一个公共节点
剑指 Offer 52. 两个链表的第一个公共节点
题目描述:输入两个链表,找出它们的第一个公共节点。
示例:
输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。
思路:两个指针,遍历后比较节点的值
代码:123456789var getIntersectionNode = function(headA, headB) { var p1=headA; var p2=headB; while(p1 !== p2){ p1=(p1==null?headB:p1.next) p2=(p2 ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
哪個英文字母最酷? 查看答案
因為西裝褲(C裝酷)
門裏站着一個人? Cli ...