剑指offer(C++)
刷题
麻辣香锅花菜
stay hungry,stay foolish~
展开
-
剑指 Offer 35. 复杂链表的复制
题目: 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。 示例 1: 输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]] 输出:[[7,null],[13,0],[11,4],[10,2],[1,0]] 示例 2: 输入:head = [[1,1],[2,1]] 输出:[[1,1],[2,1]] 分析: 1 . 复原创 2021-04-24 22:47:37 · 71 阅读 · 0 评论 -
剑指 Offer 52. 两个链表的第一个公共节点
题目: 输入两个链表,找出它们的第一个公共节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入: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 为 [原创 2021-04-24 22:31:02 · 74 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表
题目: 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 分析: 一个一个比较两个链表的值就行 解答: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode原创 2021-04-22 00:40:14 · 53 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
题目: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 分析: 定义两个指针: pre 和 cur ;pre 在前 cur 在后。 每次让 cur 的 next 指向 pre ,实现一次局部反转。 局部反转完成之后, pre 和 cur 同时往前移动一个位置 循环上述过程,直至 cur到达链表尾部 解答: /**原创 2021-04-21 23:58:21 · 60 阅读 · 0 评论 -
剑指 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个节点。 解答: /原创 2021-04-21 23:10:10 · 50 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
题目: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 分析: 存到数组里通过reverse翻转一下就行 解答: class Solution { public: vector<int> reversePrint(ListNode* head) { vector<int> res; ListNode* p = head; if(p =原创 2021-04-20 22:50:19 · 77 阅读 · 0 评论 -
剑指目录
剑指 Offer 09. 用两个栈实现队列原创 2021-04-20 21:43:06 · 72 阅读 · 0 评论 -
剑指 Offer 31. 栈的压入、弹出序列
题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 示例 1: 输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1] 输出:true 解释:我们可以按以下顺序执行: push(1), push(2), push(3), pu.原创 2021-04-20 21:40:53 · 66 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈
题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。 示例: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.min(); --> 返回 -3. minStack.pop(); minStack.top(); --> 返回 0原创 2021-04-19 00:26:46 · 58 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
题目: 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”] [[],[3],[],[]] 输出:[null,null,3,-1] 示例 2: 输入: [“CQueue”,“deleteHead”,“appendTail”原创 2021-04-18 23:32:01 · 51 阅读 · 0 评论 -
剑指1.数组相关(共12道)
目标: 4.9号前数组整理出来 前言: 每题第一个代码解法都是我写的,所以方法很可能都不是最好的,后面的解法是找的答题区的大神的思路。 数据结构和算法都忘了一些,只能刷个题来练练了,先说说俺作为一个间接性上进的小白怎么刷题的吧。 第一遍,菜鸡不用指望能会多少,没有思路可以先看下别人写的代码,照着写一遍就行,但方法一定要理解个大概。写完,进度不算快也不算慢,大概花了我一周时间。 第二遍,一定要趁着上一遍的热度,也就是我现在吧,看着题目先分析下,基本看到都有点想法了,分类再刷一遍,刷完有空整理下,方便后面看。原创 2021-04-08 00:08:30 · 153 阅读 · 0 评论