![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
程序员代码面试指南
每天学一点!
时刻保持对知识的热情!
展开
-
栈与队列01:设计一个有getMin功能的栈
【题目】实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。 【要求】1:pop、push、getMin操作的时间复杂度都是O(1)。2:设计的栈类型可以使用现成的栈结构。 【解答】在设计时,我们使用两个栈,一个栈用来保存当前栈中的元素,其功能和一个正常的栈没有区别,这个栈记为stackData;另外一个栈用于保存每一步的最小值,这个栈记为s...原创 2019-01-31 18:19:05 · 169 阅读 · 0 评论 -
链表问题06:复制含有随机指针节点的链表
【题目】一种特殊的链表节点类描述如下:class Node{ public: int value; Node *next; Node *rand; Node(int data) : value(data), next(NULL), rand(NULL){ }}Node类中的value时节点值...原创 2019-03-18 19:45:04 · 267 阅读 · 0 评论 -
链表问题05:反转部分单向链表
【题目】给定一个单向链表的头节点head,以及两个整数from和to,在单向链表上把第from个节点到第to个节点这一部分进行反转。例如:1 -> 2 -> 3 -> 4 -> 5 -> null,from = 2,to = 4调整结果为:1 -> 4 - > 3 -> 2 -> 5 -> null再如:1 -&g...原创 2019-02-06 16:47:08 · 801 阅读 · 0 评论 -
链表问题04:反转单向和双向链表
【题目】分别实现反转单向链表和反转双向链表的函数。 【要求】如果链表长度为N,时间复杂度要求为O(N),额外空间复杂度要求为O(1)。 【解答】反转单向链表,参考博客:https://blog.csdn.net/xyh269/article/details/70238501 【代码实现1-单向链表】struct Node{ int value; N...原创 2019-02-06 15:48:32 · 157 阅读 · 0 评论 -
链表问题03:删除链表的中间节点和a/b处的节点
【题目】给定链表的头节点head,实现删除链表的中间节点的函数。例如:链表为空或长度为1,不删除任何节点;1 -> 2,删除节点1;1 -> 2 -> 3,删除节点2;1 -> 2 -> 3 -> 4,删除节点2;1 -> 2 -> 3 -> 4 -> 5,删除节点3; 进阶:给定链表的头节点hea...原创 2019-02-05 15:10:48 · 334 阅读 · 0 评论 -
链表问题02:在单链表和双链表中删除倒数第K个节点
【题目】 分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点。 【要求】 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1)。 【解答-单链表】 如果链表为空或者K值小于1,这种情况下,参数是无效的,直接返回即可。除此之外,让链表从头开始走到尾,每移动一步,就让K的值减1...原创 2019-02-05 13:33:17 · 357 阅读 · 0 评论 -
链表问题01:打印两个有序链表的公共部分
【题目】给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。 【解答】因为是有序链表,所以从两个链表的头开始进行如下判断:如果head1的值小于head2,则head1往下移动。 如果head2的值小于head1,则head2往下移动。 如果head1的值与head2的值相等,则打印这个值,然后head1和head2都往下移动。 head1和head2...原创 2019-02-02 10:23:52 · 389 阅读 · 0 评论 -
栈与队列05:生成窗口最大值数组
【题目】 有一个整型数组arr和一个大小为w的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。 例如,数组为[4,3,5,4,3,3,6,7],窗口大小为3时:[4 3 5] 4 3 3 6 7 窗口最大值为54 [3 5 4] 3 3 6 7 窗口最大值为54 3 [5 4 3] 3 6 7 ...原创 2019-02-01 19:44:21 · 177 阅读 · 0 评论 -
栈与队列04:用一个栈实现另一个栈的排序
【题目】一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序? 【解答】将要排序的栈记为stack,申请的辅助栈记为help。在stack栈上执行pop操作,弹出的元素记为cur。如果cur小于或等于help的栈顶元素,则将cur直接压入help; 如果cur大于help的栈顶元...原创 2019-02-01 18:15:47 · 137 阅读 · 0 评论 -
栈与队列03:如何仅用递归函数和栈操作逆序一个栈
【题目】 一个栈一次压入1、2、3、4、5,那么从栈顶到栈底分别是5、4、3、2、1。将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。 【解答】 递归函数一:将栈stack的栈底元素返回并移除。具体过程见代码: 【代码实现1】#include <stack...原创 2019-01-31 20:02:07 · 114 阅读 · 0 评论 -
栈与队列02:由两个栈组成的队列
【题目】 编写一个类,用两个栈实现队列,支持队列的基本操作(push、pop)。 【解答】 栈的特点是先进后出,而队列的特点是先进先出。我们用两个栈正好能把顺序反过来实现类似队列的操作。 具体实现时是一个栈作为压入栈,在压入数据时只往这个栈中压入,记为stackPush;另外一个栈只作为弹出栈,在弹出数据时只从这个栈弹出,记为stac...原创 2019-01-31 19:36:36 · 131 阅读 · 0 评论 -
二叉树问题01:分别用递归和非递归方式实现二叉树先序、中序和后序遍历
【题目】用递归和非递归的方式,分别按照二叉树先序、中序和后序打印所有的节点。约定:先序遍历顺序为跟、左、右;中序遍历顺序为左、根、右;后序遍历顺序为左、右、根。【递归代码实现】class Node{ public: int value; Node *left; Node *right; Node(int d...原创 2019-04-02 12:06:27 · 1597 阅读 · 0 评论