遍历图有两种主流玩法,今天主角是DFS(深度优先遍历) ,它的核心逻辑堪称 “一根筋式破案”:
如果先遍历链表得到总长度 len,再遍历到第 len - k 个节点,需要两次完整遍历,效率较低;若 k 值过大(超过链表长度),还可能出现空指针异常。
比如你用数组存数据时,想知道 “现在装了多少个元素”,只能自己遍历数组统计(如果有未赋值的元素,还会统计错);想在指定位置插入一个元素,得自己手动把后面的元素 ...
而邻接链表恰好解决了这个问题。它采用 “顶点数组 + 边链表” 的组合形式,为每个顶点建立一个链表,链表中存储该顶点直接相连的邻接顶点信息。这种结构在稀疏图中能...
在 C 语言中,查找水仙花数是入门级的编程练习,它主要运用了循环遍历和数字拆分的思路。而我们今天要分析的代码,其实已经超越了单纯查找 3 位水仙花数的范畴,具备...
在 C 语言的学习和实际开发中,位运算往往是一块既重要又容易被忽略的知识点。它直接操作计算机内存中的二进制位,能实现许多高效的功能,而 “统计一个整数在内存中二...
制作好链子后,我们需要知道链子上有哪些 “内容”(遍历链表),以及链子有多长(获取链表长度)。这两个操作都需要遍历链表,代码实现如下:
二叉树是数据结构中最常用的树形结构之一,它的核心特点是每个节点最多有两个子节点,分别称为左子树(lchild)和右子树(rchild)。这种结构既保留了线性结构...
单链表作为线性表的经典实现,凭借灵活的内存分配优势广泛应用,但正向遍历的特性也让 “反转” 操作成为高频考点。今天就用一段简洁代码,拆解单链表反转的核心思路。
2025-12-30:统计梯形的数目Ⅰ。用go语言,给定一组平面上的整数坐标点 points,其中每个元素 points[i] = [xi, yi] 表示第 i...
但是在处理未完成之前,必然存在着一个零和非零数共存的区域,所以在处理的过程当中一共有三个区域,0区,非0区和未处理区。要将整段数据划分成三个区域,那么我们需要几...
前面我们实现了单链表,单链表只是链表的一种。可以根据以下几个标准来判断链表的类型:
在前面我们学习了顺序表,顺序表在数组的基础上提供了很多现成的方法,方便了我们对数据的管理,但是我们也发现顺序表有着许多不足:
这棵树中序遍历的结果是:-3,1,5,8,10,15。把10拿下来让左子树高度减一,再向办法把10放到右子树中,5的右子树绝对比它的父节点(10)小,所以可以把...
前面以及有了堆的基础,现在来学习二叉树。二叉树的学习和前面的数据结构很不一样,前面我们主要学习用数据结构储存数据,以及实际手搓数据结构的增删查改;而学习二叉树主...
. - 力扣(LeetCode) 如果链表的两条链的长度一样,链表两端对齐,解决这个问题将会变得非常简单,直接分别遍历两个链表,想等时的节点即为所求。我们想...
要注意,完全二叉树的编号是连续的,中间断开则不是完全二叉树 如下图的树就不是完全二叉树:
这时候我想到了龟兔赛跑的故事 我们可以用一个快指针,一个慢指针来遍历链表 一个每次走2步,一个每次走1步,这样快指针每次就一定会比慢指针快一步
因此可以创建 a 数组的 前缀和数组,然后在遍历前缀和数组的过程中,一边更新前驱最小值,一边更新当前位置为结尾的最大子段和
这题要先通过后序遍历找根节点(a),再通过中序遍历找左子树(b),最后通过中序遍历和后续遍历的右子树判断右子树的根节点(c),还原二叉树后再前序遍历,也可以找到...