首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

23张图!万字详解「链表」,从小白到大佬!

链表和数组是数据类型中两个重要又常用基础数据类型,数组是连续存储在内存中数据结构,因此它优势是可以通过下标迅速找到元素位置,而它缺点则是在插入和删除元素时会导致大量元素被迫移动,为了解决和平衡此问题于是就有了链表这种数据类型...分类 链表通常会分为以下三类: 单向链表 双向链表 循环链表 单链表 双循环链表 1.单向链表 链表中最简单一种是单向链表,或叫单链表,它包含两个域,一个数据域和一个指针域,指针域用于指向下一个节点...单链表遍历方向单一,只能从链头一直遍历到链尾。它缺点是当要查询某一个节点前一个节点时,只能再次从头进行遍历查询,因此效率比较低,而双向链表出现恰好解决了这个问题。...Java中链表 学习了链表基础知识之后,我们来思考一个问题:Java 中链表 LinkedList 是属于哪种类型链表呢?单向链表还是双向链表?...链表可分为:单向链表、双向链表和循环链表,其中循环链表又可以分为单链表和双循环链表。

53540

C语言中循环语句总结

while坏:  for循环:  while和for循环对比: 区别:for 和 while 在实现循环过程中都有初始化、判断、调整这三个部分,但是 for 循环三个部 分⾮常集中,便于代码维护...如果你希望 n 初始值为 0 时不进行计算,可以改用 while 循环并将判断条件放在循环之前。  break和continue在循环语句作用 break:永久终⽌循环....环中 continue 后代码,直接去到循环调整部分。...,来到了i++调整部分 printf("%d ", i); } return 0; } 运行结果: 对比for循环和while环中continue对代码运行影响: 分析代码可以知道它们修改条件位置不同...,在i=5这个基础上进行i++ do while语句中break和continue作用跟while一样: goto语句 作用:goto 语句可以实现在同⼀个函数 内跳转到设置好标号处。

11010
您找到你想要的搜索结果了吗?
是的
没有找到

【算法篇】三道题理解算法思想——认识BFS

1.N叉树层序遍历 题目链接: https://leetcode.cn/problems/n-ary-tree-level-order-traversal/description/ 算法思路: 仅需多加...但是,这⾥有个细节问题:如果⼆叉树层数⾮常恐怖的话,我们任何⼀种数据类型都不能存下下标的值。...但是没有问题,因为 • 我们数据存储是⼀个环形结构; • 并且题⽬说明,数据范围在 int 这个类型最⼤值范围之内,因此不会超出⼀圈; • 因此,如果是求差值的话,...在每个树行中找最大值 - 力扣(LeetCode) 算法思路: 层序遍历过程中,在执⾏让下⼀层节点⼊队时候,我们是可以在循环中统计出当前层结点最⼤值。...(); q.add(root); while(!

10610

【Java】循环语句for、while、do-while

循环语句 1.1 循环概述 1.2 循环语句1--for 1.3 循环语句2--while 1.4 循环语句3--do...while 1.5 循环语句区别 1.6 跳出语句 break continue...,从而结束 环,否则循环将一直执行下去,形成死循环。...③具体执行语句 ④循环后,循环变量变化情况 输出10次HelloWorld do...while 循环特点:无条件执行一次循环体,即使我们将循环条件直接写成 false ,也依然会...1.5 循环语句区别 for 和 while 小区别: 控制条件语句所控制那个变量,在 for 循环结束后,就不能再被访问到了,而 while 循环结束还可 以继续使用,如果你想继续使用...扩展知识点 2.1 死循环 死循环: 也就是循环中条件永远为 true ,死循环是永不结束循环。例如: while(true){} 。

6.7K10

【算法题】从0培养算法思想——双指针篇

• 对撞指针终⽌条件⼀般是两个指针相遇或者错开(也可能在循环内部找到结果直接跳出 环),也就是: ◦ left == right (两个指针指向同⼀个位置) ◦ left...其实不单单是环形链表或者是数组,如果我们要研究问题出现循环往复情况时,均可考虑使⽤快 慢指针思想。...快慢指针实现⽅式有很多种,最常⽤⼀种就是: • 在⼀次循环中,每次让慢指针向后移动⼀位,⽽快指针往后移动两位,实现⼀快⼀慢。...1.移动零问题 题目链接: https://leetcode.cn/problems/move-zeroes/description/ 解题思路: 利用两个指针将数组分为三区间,分别是不含零元素区间,...三数之和 - 力扣(LeetCode) 解题思路: 本题与两数之和类似,是⾮常经典⾯试题。 与两数之和稍微不同是,题⽬中要求找到所有「不重复」三元组。

6310

LeetCode-Palindromic Substrings

实现 Scala实现是在LeetCode上看到一个大神答案,使用纯函数实现,写得很美妙,拿过来与大家分享!...for循环中i从左到右依次遍历给定字符串,j控制是奇数个数子串情况和偶数个数子串情况,for循环中第三个匿名变量其实相当于一个条件判断。...整个for循环返回一个vector(里面都是true),最后统计这个vector个中包含元素个数即可。 这里重点说一下for循环中第三个匿名循环控制语句。...如果左指针和右指针指向值不相等,则返回Nil(一个空List)。如果返回是Nil的话,则不会生成一个true。这样子,其实第三个循环控制语句起到是判断作用。...注: Scala中Vector类似于Java中ArrayList,而Scala中List类似于Java中LinkedList Scala中List有两个特殊子类:::表示非空List,Nil

63970

for循环简介及break和continue区别

大家好,又见面了,我是你们朋友全栈君。 1.for循环 for循环是更加简洁循环语句,大部分情况下,for循环可以代替while循环、do-while循环。...for循环格式为: for( 初始语句 ; 执行条件 ; 增量 ) { 循环体 } 执行顺序:1、初始语句 2、执行条件是否符合?...注意:for循环循环体和迭代语句不在一起(while和do-while是在一起)所以如果使用continue来结束本次 环,迭代语句还有继续运行,而while和do-while迭代部分是不运行...1.break 有时候我们想在某种条件出现时候终止循环而不是等到循环条件为false才终止。 这是我们可以使用break来完成。break用于完全结束一个循环,跳出循环体执行循环后面的语句。...可以理解为continue是跳过当次循环中剩下语句,执行下一次循环。

3K00

C语言基础——循环详解!

while 循环 do...While循环 For循环 一、while循环 1、形式: while (表达式) // { //语句 } 表达式 每一次循环都要判定表达式值 如果为真(表达式值为1)...继续执行 环后面的代码 (3)执行完b 后,继续判断a是否满足条件。...由于while循环不会自行更改循环控 制变量内容,所以while环中为循环控制变量赋值工作要由设计者自己来 做,完成后再回到步骤(2)重新判断是否继续执行循环。...裙里有大量学习资料,有大神解答交流问题,每晚都有免费直播课程 二、Do.....while do { 语句; } while (表达式); 先执行一次循环里面的代码,然后对表带是求值,值为真接着循环...注意:do……while语句最后分号(;)不可少,否则提示出错。

4K00

寻找链表中环入口节点

获取该有环链表环入口节点(即:节点8) 链表中是否有环 首先,我们需要确保链表中是否包含一个环,在上篇文章(获取链表中倒数第K个节点)中我们用双指针思路解决了问题,那么,我们也尝试下能否用双指针来解决这个问题...环中有4个节点,那么 将p1指针在链表上向前移动4步 p1、p2指针以相同速度在链表上向前移动 它们相遇节点正好是环入口节点 IMG_66D663B2FE91-1 获取环中节点数量 通过上个章节分析...,我们知道了只要能得到环中节点数量,就可以找到环入口节点。...p1、p2指针指向判断链表中有环时相遇节点 p1指针继续向前移动,边移动边计数 p1指针与p2指针再次相遇时,即可得到环中节点数量 IMG_584FEB598A64-1 实现代码 通过上面的分析,我们已经得到了解决问题思路...变量所记录值就是环中节点总数量 获取环中节点总数量 寻找环入口节点 // 寻找环入口节点 findRingEntranceNode(): ListNode | null { //

83420

理解分析java集合操作之ConcurrentModificationException

减一此时size==4, modCount++了,然后Iterator对象中cursor==5,hasNext发回了true,导致增强for 环去寻找下一个元素调用next()方法,checkForComodification...这就是本例ConcurrentModificationException 产生根本原因。 既然问题我们分析清楚了,如何解决呢?这里我们顺着这个思路倒推,列出集中解决办法。...解决问题 不使用增强for循环 对于这个例子,很明显我们知道异常产生原因是由于ArrayList中属性和内部类Itr中 属性不一致导致,那么可以假设在for循环和remove操作时候不设计到...,唯一不同就是ArrayList换成了LinkedList,突然发现执行这段代码怎么就不报错了呢。...remove操作,并且是在for循环中处理时候, 理解了这些东西就会避免掉bug以及出现错误。

67130

MySQL数据库,详解流程控制语句(四)

这块和while不 同,while是先判断条件是否成⽴再执⾏循环体。 示例1:⽆循环控制语句 根据传⼊参数v_count向test1表插⼊指定数量数据。...示例1:⽆循环控制语句 根据传⼊参数v_count向test1表插⼊指定数量数据。...本⽂主要介绍了mysql中控制流语句使⽤,请⼤家下去了多练习,熟练掌握 2. if函数常⽤在select中 3. case语句有2种写法,主要⽤在select、begin end中,select中end...后⾯可以省略case, begin end中使⽤不能省略case 4. if语句⽤在begin end中 5. 3种循环体使⽤,while类似于java中while循环,repeat类似于java...循环中体中控制依靠leave和iterate,leave类似于java中break可以退出 环,iterate类似于java中continue可以结束本次循环

2.5K10

几道和「二叉树」有关算法面试题

二叉树详细讲解请戳这:懵逼树上懵逼果:学习二分搜索树 1. 二叉树前序遍历 题目来源于 LeetCode 第 144 号问题:二叉树前序遍历。...二叉树中序遍历 题目来源于 LeetCode 第 94 号问题:二叉树中序遍历。 题目描述 给定一个二叉树,返回它 中序 遍历。 题目解析 用栈(Stack)思路来处理问题。...二叉树后序遍历 题目来源于 LeetCode 第 145 号问题:二叉树后序遍历。 题目描述 给定一个二叉树,返回它 后序 遍历。 题目解析 用栈(Stack)思路来处理问题。...后序遍历顺序为左-右-根,具体算法为: 先将根结点压入栈,然后定义一个辅助结点head while循环条件是栈不为空 在循环中,首先将栈顶结点t取出来 如果栈顶结点没有左右子结点,或者其左子结点是head...二叉树层序遍历 题目来源于 LeetCode 第 102 号问题:二叉树层序遍历。 题目描述 给定一个二叉树,返回其按层次遍历节点值。 (即逐层地,从左到右访问所有节点)。

85920

教你10条下饭操作!

莫慌,这就来教你10条下饭操作 一、MyBatis 不要为了多个查询条件而写 1 = 1 当遇到多个查询条件,使用where 1=1 可以很方便解决我们问题,但是这样很可能会造成非常大性能损失,...二、迭代entrySet() 获取Map key 和value 当循环中只需要获取Map 主键key时,迭代keySet() 是正确;但是,当需要主键key 和取值value 时,迭代entrySet...Collection.size() 方法实现时间复杂度可能是O(n) 反例: LinkedList collection = new LinkedList(); if (collection.size...Java 会对其进行优化,但是在循环中字符串拼接Java 编译期无法执行优化,所以需要使用StringBuilder 进行替换。...用catch 语句捕获异常后,若什么也不进行处理,就只是让异常重新抛出,这跟不捕获异常效果一样,可以删除这块代码或添加别的处理。

54730

如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例

while循环,而不是if语句中调用wait。...但if语句存在一些微妙问题,导致即使条件没被满足,你线程你也有可能被错误地唤醒。...所以记住,永远在while循环而不是if语句中使用wait!我会推荐阅读《Effective Java》,这是关于如何正确使用wait和notify最好参考资料。...生产者在无限循环中持续往LinkedList里插入随机整数直到LinkedList满。我们在while(queue.size == maxSize)循环语句中检查这个条件。...永远在while循环里而不是if语句下使用wait。这样,循环会在线程睡眠前后都检查wait条件,并在条件实际上并未改变情况下处理唤醒通知。 4.

96420

如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例

while循环,而不是if语句中调用wait。...但if语句存在一些微妙问题,导致即使条件没被满足,你线程你也有可能被错误地唤醒。...所以记住,永远在while循环而不是if语句中使用wait!我会推荐阅读《Effective Java》,这是关于如何正确使用wait和notify最好参考资料。...生产者在无限循环中持续往LinkedList里插入随机整数直到LinkedList满。我们在while(queue.size == maxSize)循环语句中检查这个条件。...永远在while循环里而不是if语句下使用wait。这样,循环会在线程睡眠前后都检查wait条件,并在条件实际上并未改变情况下处理唤醒通知。 4.

84210

解析PHP跳出循环方法以及continue、break、exit区别介绍

本篇文章是对PHP跳出循环方法以及continue、break、exit区别进行了详细分析介绍,需要朋友参考下 PHP中循环结构大致有for循环,while循环,do{} while 循环以及...foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式: 代码: 代码如下: <?...; } else if ($i==5) { // 但到这里$i=5就跳出循环了 break; } else { echo $i ....> PHP代码片段作用是输出100以内,既不能被7整除又不能被3整除那些自然数,循环中先用if条件语句判断那些能被整除数,然后执行 continue;语句,就直接进入了下个循环。...不会执行下面的输出语句了。 break break是被用在上面所提各种循环和switch语句。他作用是跳出当前语法结构,执行下面的语句

4.9K40
领券