![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构典例
文章平均质量分 86
giturtle
Stay hungry, stay foolish. Lu
展开
-
【图文解析】删除链表中等于给定值 val 的所有结点
例题描述删除单链表中所有等于某给给定值的所有结点。示例 :输入: 1->2->6->3->4->5->6, val = 6输出: 1原创 2019-03-18 00:19:08 · 1490 阅读 · 0 评论 -
【图文解析】找到两个单链表相交的起始结点
目录例题描述解题思路代码实现例题描述编写一个程序,找到两个单链表相交的起始结点。如下面的两个链表,在结点 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 = ...原创 2019-04-01 21:48:07 · 1891 阅读 · 7 评论 -
【图文解析】给定一个链表,判断链表中是否有环
目录例题描述解题思路代码实现例题描述给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例一:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个结点。示例二:输入:head = [1...原创 2019-04-01 23:03:01 · 2959 阅读 · 0 评论 -
【图文解析】返回链表开始入环的第一个结点
目录例题描述方法一代码实现方法二代码实现例题描述给定一个链表,返回链表开始入环的第一个结点。 如果链表无环,则返回 NULL。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。【说明:不允许修改给定的链表】示例 1:输入:head = [3,2,0,-4], pos = 1输出:ta...原创 2019-04-02 22:32:09 · 1437 阅读 · 8 评论 -
[数据结构] 二叉树典例
目录1. 给定二叉树,返回其前序遍历2. 相同的树3. 另一个树的子树4. 二叉树的最大深度5. 平衡二叉树6. 对称二叉树7. 二叉树遍历二叉树结点结构体定义struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right;};1. 给定二叉树,返回其前序遍历int *array;int si...原创 2019-04-07 23:31:20 · 305 阅读 · 0 评论 -
【图文解析】判断链表的回文结构
目录例题描述例题描述对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。示例:输入:1->2->2->1输出:true结点结构体struct ListNode { int val; struct Li...原创 2019-04-02 23:34:14 · 416 阅读 · 0 评论 -
[数据结构] C/C++重建二叉树
#pragma once#include "BinaryTree.h"#include <stdbool.h>bool isSame(Node*p, Node*q) { if (p == NULL && q == NULL) { return true; } if (p == NULL || q == NULL) { return false;...原创 2019-04-14 21:06:08 · 11040 阅读 · 1 评论 -
【图文解析】复制带随机指针的链表(返回链表的深拷贝)
例题描述给定一个链表,每个结点包含一个额外增加的随机指针,该指针可以指向链表中的任何结点或空节点。要求返回这个链表的深拷贝。示例:输入:{"$id":"1","next":{"$id":"2","next":null,"random":{"$ref":"2"},"val":2},"random":{"$ref":"2"},"val":1}解释:节点 1 的值是 1,它的下一...原创 2019-04-05 00:21:24 · 853 阅读 · 0 评论 -
C++实现二叉树层序遍历、前中后序等
目录利用队列实现层序遍历判断是否为完全二叉树用栈实现前、中、后序(非递归方式)栈实现前序栈实现中序栈实现后序利用队列实现层序遍历广度优先遍历void LevelOrder(Node *root) { if (root == NULL) { printf("\n"); } // 启动 std::queue<Node *> q; q.push(root); wh...原创 2019-04-14 21:05:14 · 341 阅读 · 0 评论 -
[数据结构] 二叉树转双向链表
目录例题描述代码实现例题描述将该二叉树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。二叉树结点结构体定义struct TreeNode { struct TreeNode *left; struct TreeNode *right;};代码实现Node *prev = NULL; // 保证按有序的顺序调用该函数void NodeToDo...原创 2019-04-14 21:16:24 · 1251 阅读 · 0 评论 -
[数据结构] 二叉树的最近公共祖先
目录例题描述代码实现例题描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例1:输入: root = [3,5,1,6,2,0,8,null,null,7,4]输出: 3解释:节点...原创 2019-04-14 21:19:42 · 465 阅读 · 0 评论 -
C++ 实现括号有效性匹配问题
解题思路创建一个char类型的栈。将传入的字符串s进行逐字节遍历,因为情景条件固定三种,所以使用switch语句。如果是{}、()、[]中的左括号就通过push()入栈。如果是右括号,就进行比较。1)如果为此时空栈empty(),说明没有与右括号匹配的左括号,右括号个数多于左括号个数,一定不会皮城成功,此时直接返回false。2)如果不是空栈,取出栈顶元素与当前右括号匹配。如果成功...原创 2019-03-31 22:54:26 · 1013 阅读 · 0 评论 -
C++ 设计循环队列
目录例题描述解题思路代码实现例题描述设计你的循环队列实现。循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是:可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。...原创 2019-04-05 13:59:40 · 2129 阅读 · 0 评论 -
【图文解析】删除顺序表中等于给定值 val 的所有结点
目录例题描述思路一代码实现分析思路二代码实现分析例题描述删除顺序表表中所有等于某给给定值的所有结点。示例 :输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5结构体定义typedef int SLDataType;struct SeqList{ SLDataType* a...原创 2019-03-18 09:13:48 · 806 阅读 · 0 评论 -
【图文解析】反转一个单链表
目录例题描述思路一代码实现分析思路二代码实现分析例题描述反转一个链表示例:输入: 1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;NULL输出: 5-&gt;4-&gt;3-&gt;2-&gt;1-&gt;NULL结构体定义struct ListNode { int val; struct ListNode *next原创 2019-03-18 15:26:38 · 75589 阅读 · 32 评论 -
【图文解析】返回单链表的中间结点
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。原创 2019-03-25 15:48:16 · 1706 阅读 · 0 评论 -
【图文解析】合并两个有序链表
目录例题描述解题思路代码实现小结例题描述将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4,1->3->4输出:1->1->2->3->4->4结点结构体定义struct ListNode { int val; struct ListNode *next;...原创 2019-03-25 23:03:11 · 1343 阅读 · 2 评论 -
【图文解析】链表中倒数第 k 个结点
目录例题描述解题思路代码实现小结例题描述输入一个链表,输出该链表中倒数第k个结点。示例:输入:1->2->4->1->3->4,k = 3输出:此列表中的结点 1 (序列化形式:[1,3,4])结点结构体定义struct ListNode { int val; struct ListNode *next;};解题思路前后指针法:建...原创 2019-03-26 13:35:57 · 1854 阅读 · 0 评论 -
【图文解析】删除链表中连续重复的结点
目录例题描述解题思路代码实现小结例题描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。示例:输入:1->2->3->3->4->4->5输出:1->2->5结点结构体定义struct ListNode { int val; struct ListNode *next;};...原创 2019-03-26 23:09:10 · 758 阅读 · 0 评论 -
【图文解析】链表分割
目录例题描述解题思路代码实现例题描述编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前。给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。(注意:分割以后保持原来的数据顺序不变)示例:输入:9->5->2->7,x = 4输出:2->9->5->7结点结构体定义ty...原创 2019-04-04 00:31:21 · 798 阅读 · 0 评论 -
C++ 实现一个最小栈
目录例题描述解题思路压栈弹栈获取栈顶元素检索栈中最小值代码实现例题描述设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top()– 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack();min...原创 2019-04-05 11:32:03 · 1178 阅读 · 0 评论 -
C++ 用队列实现栈
目录例题描述解题思路图文弹栈代码实现例题描述使用队列实现栈的下列操作:push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。你所使用的语言也许...原创 2019-04-05 00:57:45 · 1256 阅读 · 2 评论 -
C++ 用栈实现队列
目录例题描述解题思路图文出队代码实现例题描述使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。top() – 返回队列首部的元素。empty() – 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2); queue.top()...原创 2019-04-05 11:05:50 · 1704 阅读 · 0 评论 -
[C++] 栈的压入、弹出序列
目录例题描述解题思路代码实现例题描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出序列。假设压入栈的所有数字均不相等。例如:序列{1,2,3,4,5}是某栈的压栈序列,序列{4,5,3,2,1}是该压栈序列对应的一个弹出序列,但{4,3,5,1,2}就不可能是该压栈序列的弹出序列。解题思路解决该问题需要借助一个辅助栈,把输入的第一个序列中的数字依次入...原创 2019-07-24 11:20:57 · 2702 阅读 · 0 评论