![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer刷题
努力呀kk
这个作者很懒,什么都没留下…
展开
-
剑指offer 面试题27: 二叉树的镜像
面试题27: 二叉树的镜像操作给定的二叉树,将其变换为源二叉树的镜像。思路:先前序遍历这棵树的每个节点,如果遍历到的节点有子节点,就交换它的两个子节点。当交换完所有非叶节点的左、右子节点之后,就得到了树的镜像。/*1,非递归*/import java.util.*;public class Solution { public void Mirror(TreeNode root) { if(root == null) return; Stack<原创 2020-07-03 20:11:20 · 236 阅读 · 1 评论 -
剑指offer 25:合并两个排序的链表
面试题25:合并两个排序的链表题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路:双指针,分别指向两个链表的头节点,如果链表2的头节点的值小于链表1的头节点的值,那么链表2的头节点的值就是合并链表的头节点,把这个节点和前面合并链表时得到的链表的尾节点连接起来。指针后移,继续之前的步骤。/*public class ListNode { int val; ListNode next = null; ListNode(in原创 2020-06-29 22:47:54 · 163 阅读 · 0 评论 -
剑指offer面试题24:反转链表
面试题24:反转链表题目描述定义一个函数,输入一个链表的头节点,反转链表后,输出新链表的表头。如上图,假设经过若干操作,我们已经把节点h之前的指针调整完,这些节点的next都指向前一个节点。接下来把i的next指向h。但是这时无法在链表中遍历到节点j。为了避免在节点i处断开,需要在调整节点i的next之前,把节点j保存下来。也就是说,我们在调整节点i的next指针时,除了知道节点i本身,还需要知道前一个指针,因此我们需要把节点i的next指向节点h。同时,我们还需要事先保存i的下一个节点j,以防止原创 2020-06-29 17:32:53 · 257 阅读 · 0 评论 -
剑指offer 23,链表中环的入口节点
双指针法1,确定一个链表中包含环定义两个指针,同时从链表的头节点出发,一个指针每次走一步,另一个指针每次走两步;如果快指针追上了慢指针,那么链表就包含环。2,得到环中节点数目两个指针相遇的节点一定在环中,从这个节点出发,一边继续向前移动一边计数,再次回到这个节点时,就可以得到环中结点的数目。3,找到环的入口先定义两个指针P1,P2指向头节点。如果链表环中有n个节点,则指针p1先向前移动n步,然后两个指针以相同的速度向前移动。当第二个指针指向环的入口节点时,第一个指针已经绕着环走了一圈回到了入原创 2020-06-29 11:46:14 · 6674 阅读 · 0 评论 -
剑指offer 21. 调整数组顺序使奇数位于偶数前面
剑指offer 21. 调整数组顺序使奇数位于偶数前面输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。1,如果不考虑时间复杂度,最简单的思路是从头扫描这个数组,每碰到一个偶数,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位。挪完之后在数组的末尾有一个空位,这时把该偶数放入这个空位。由于每碰到一个偶数就需要移动O(n)个数字,因此总的时间复杂度是O(n^2).2,双指针:第一个指针初始化时指向数组的第一个数字,它只向后移动;原创 2020-06-28 23:00:00 · 184 阅读 · 0 评论 -
剑指Offer 22.链表中倒数第k个节点
剑指Offer 22.链表中倒数第k个节点输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。思路:双指针第一个指针从链表的头指针开始遍历向前走k-1布,第二个指针保持不动;第一个指针走到第k步,第二个指针从头节点开始遍历,由于两个指针的距离保持在k-1,第一个指针到达链表尾节点时,第二个指针正好走到倒数第k个节点。/原创 2020-06-28 22:46:27 · 141 阅读 · 0 评论