范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

数据结构与算法完整版超详细图解,看这一篇就够了

  反转链表
  反转一个单链表。输入: 1->2->3->4->5 输出: 5->4->3->2->1解法1:
  迭代,重复某一过程,每一次处理结果作为下一次处理的初始值,这些初始值类似于状态、每次处理都会改变状态、直至到达最终状态
  从前往后遍历链表,将当前节点的next指向上一个节点,因此需要一个变量存储上一个节点prev,当前节点处理完需要寻找下一个节点,因此需要一个变量保存当前节点curr,处理完后要将当前节点赋值给prev,并将next指针赋值给curr,因此需要一个变量提前保存下一个节点的指针next
  1、将下一个节点指针保存到next变量 next = curr.next
  2、将下一个节点的指针指向prev,curr.next = prev
  3、准备处理下一个节点,将curr赋值给prev
  4、将下一个节点赋值为curr,处理一个节点解法2:
  递归:以相似的方法重复,类似于树结构,先从根节点找到叶子节点,从叶子节点开始遍历大的问题(整个链表反转)拆成性质相同的小问题(两个元素反转)curr.next.next = curr将所有的小问题解决,大问题即解决
  只需每个元素都执行curr.next.next = curr,curr.next = null两个步骤即可为了保证链不断,必须从最后一个元素开始public class ReverseList {static class ListNode{int val;ListNode next;public ListNode(int val, ListNode next) {this.val = val;this.next = next;}}public static ListNode iterate(ListNode head){ListNode prev = null,curr,next;curr = head;while(curr != null){next = curr.next;curr.next = prev;prev = curr;curr = next;}return prev;}public static ListNode recursion(ListNode head) {if (head == null || head.next == null) {return head;}ListNode newHead = recursion(head.next);head.next.next = head;head.next = null;return newHead;}public static void main(String[] args) {ListNode node5 = new ListNode(5,null);ListNode node4 = new ListNode(4,node5);ListNode node3 = new ListNode(3,node4);ListNode node2 = new ListNode(2,node3);ListNode node1 = new ListNode(1,node2);//ListNode node = iterate(node1); ListNode node_1 = recursion(node1); System.out.println(node_1); } }
  案例实战,举一反三
  有如下链表:
  要求对链表进行反转,反转后的链表如下:
  题目解析
  反转链表,就是将链表中每一个节点的 next 引用指向其前驱节点。链表默认自带一个引用,这个引用指向了头节点,记为 n1。首先尝试将 n1 的 next 引用进行反转:
  可以发现,① 的 next 引用指向了空,由于 ① 切断了指向 ② 的引用,导致 n1 无法移动到 ② 和 ③,此时可以再引入一个引用,记为 n2,n2 指向 ②:
  对 ② 进行反转:
  这时候 ③ 丢失了,是否可以复用现有的引用来访问到 ③ 呢,答案是不行的。 ② 的前驱节点需要通过 n1 来访问,此时需再引入一个新的引用 n3,来指向 ③:
  对 ③ 进行反转:
  这时候三节点链表就完成了反转,题目到这是否就分析结束了呢?再引入一个节点 ④,如图:
  不难发现,④ 节点又丢失了。再思考,能否复用现有引用,来访问到 ④,光从上图的结果来看,是不行的,一旦一个节点完成了反转,其后继节点就丢失了,除非创建与链表节点数量一致的引用,每一个引用指向其中一个节点,然后按上述方式对每个节点完成反转。这种方式显然不够优雅,那能否在反转下一个节点之前,先将引用后移,再反转呢?
  接下来我们尝试边反转,边移动引用。通过上述分析,反转链表至少要 3 个引用,可以得出移动的时机是在反转 ③ 的时候,我们在反转 ③ 之前,先后移引用,保证不丢失 ④:
  然后反转 ③:
  我们需要指定一个引用,专门用来反转节点 next 指向。显然指定中间引用 n2 是合适的,n1 指向着 n2 的前驱节点,n3 指向着 n2 的后继节点,这样可以既完成反转,又不会丢失后续的节点。因此,我们在反转 ③ 之后,继续后移引用,使得 n2 指向 ④,完成对 ④ 的反转:
  这里将移动和反转做了合并,可以看到,现在整个链表已经完成了反转。代码实现
  现在,我们只需将上述的分析结果翻译成代码即可。经过分析可知,反转链表一共需要三个引用,为了清晰直观,依次记为 prev、node、next,node 用于反转节点 next 指针。每当完成一次反转,三个引用便整体向后移动一个节点。代码实现如下:public static Node reverse(Node node) {if (node == null || node.next == null) {return node;}Node prev = null;Node next = node.next;//next 指向空时,只需再进行最后一次反转while (next != null) {//反转节点node.next = prev;//引用后移prev = node;node = next;next = next.next;}//反转最后一个节点node.next = prev;//返回反转后的链表头引用return node;}
  需要注意的是,当 next 引用指向空时,末尾最后一个节点还未反转,所以在循环外要再反转一次。
  另外,这里必须将处理好的 node 引用在方法中返回出去,通过拿方法的返回值来获取反转后的链表。如果仍然使用传入的 node,会发现 node 只剩下一个节点。有如下测试代码://定义链表:1 -> 2 -> 3Node node = new Node(1);node.next = new Node(2);node.next.next = new Node(3);System.out.println("原始链表:");show(node);//反转链表Node rNode = reverse(node);System.out.println("反转后:");show(node);show(rNode);
  结果如下:原始链表:[Node{num=1, next=2}, Node{num=2, next=3}, Node{num=3, next=}]反转后:[Node{num=1, next=}][Node{num=3, next=2}, Node{num=2, next=1}, Node{num=1, next=}]
  这是因为在 Java 中传递的是值,而不是引用。反转后的图例如下:
  在传递 node 时,是将 node 保存的内存地址复制了一份,传给了方法参数 node,方法中对 node 的移动,不会影响方法外的 node。
  反转链表至此完成,在解决链表相关问题时,要时刻注意不能丢失节点,在修改节点 next 或者 prev 指针时,都要保证仍能访问到其他节点,如果发现无法复用现有引用,可以尝试新增引用。保证了这一点之后,剩下的就是按题目要求实现即可。
  篇幅有限,其他内容就不在这里一一给大家解析了,整理不易,非常欢迎大家一起学习交流,喜欢文章记得关注我点赞哟,感谢支持!
  该资料获取方式:关注+转发后,私信【2022】获取完整版算法合集!

炉石猎人只能打脸没有后期?奥特兰克兽王猎传说攻略在过去一年中,标准模式的猎人似乎只有一个形态,那就是T7猎,其他的猎人卡组都是不温不火,包括上个版本的任务猎。最重要的是,如果你要玩任务猎的话,狂野模式是更好的选择。而在奥特兰克版剑网三客户端停止更新!玩家这游戏真的凉了?连脸型都下架了剑网三客户端停止更新?这个消息着实让不少玩家都惊讶了。用心做游戏,用脚做优化,机房烤土豆,点卡服有点卡,已经成为了剑三玩家最熟悉的回忆之一。其实剑三也一直在想办法改进一直被大家吐槽幻塔手游疑似上线PS主机平台?近期颇受关注的开放世界手游幻塔已经开启测试了,作为下半年关注度比较高的手机游戏之一,幻塔主打的开放世界自由探索的特点,都和已经大热了很久的原神相似度比较高。幻塔官网封面不过细心的人另一个伊甸疯狂之力是什么另一个伊甸疯狂之力用法另一个伊甸疯狂之力是什么?另一个伊甸疯狂之力是游戏里的一个增益效果,这个效果有不少人可以使用,用法相对来说还是比较特殊的,除了强化效果以外还有一些限制,那么下面就是另一个伊甸疯狂之AG计划挂牌初晨,有意向补强中路和射手,阿泽竞争对手归队KPL秋季赛即将步入尾声,很多队伍已经提前被淘汰出局,并且缺席挑战者杯,只能等待来年春季赛再战,银河战舰成都AG超玩会就是其中之一。本赛季的AG成绩确实不好,主教练月光也引咎辞职,赛尔号被连环氪金玩坏的冰原黑影,超进化连续进行了两次劝退这一期就算是讲完赛尔号稀有御三家的全部内容,希望能带大家回忆起20092021全年精灵历程布林克斯林克的高级形态,也是赛尔号2009年早期登场的精灵。林克一般在寒冰溶洞左上角(也就怪猎崛起联动日本环球影城将推联动事件任务今日,怪物猎人崛起官方推特宣布,将与日本环球影城展开合作,并在游戏中推出联动事件任务,另外附加了一张海报。暂未公布更多消息,后续我们将持续跟进。本作为卡普空怪物猎人系列新作,故事发福利猎杀对决冬至活动现已开启由孤岛危机系列工作室Crytek开发的PVPPVE竞技游戏猎杀对决现已开启冬至活动,活动持续时间为12月15日1月5日。玩家可以通过参与活动赢取积分,换取独家奖励。猎杀对决目前也在冰雪传奇手游成品神器怎么合成?冰雪传奇手游中可以消耗残神器,把不朽剑甲神器上古神器升级为神器上古神器起源神器,需要消耗龙魄珠洗髓丹恶魔令牌天地灵气四种材料,剑甲晋级有成功率设定不朽剑甲晋级神器每次有8的成功率,魔兽世界S3赛季征服点套装275级封顶,宇宙角斗士很霸气魔兽世界9。2版本进入S3赛季,新版本的装备将进行换代,最直接的表现就是装等得到提升。测试服已经更新了PVP的装备和副本装等的变化,宏伟宝库团本和橙装还没有更新装等,但可以从PVP实况足球各版本传奇里杰卡尔德比较最近有粉丝问黄传里杰克尔德和时刻哪个好,黄传需不需要换时刻等问题,这里给大家解答一下哈。有图为证先说一下,如果有刚抽到李姐的,可以听听飞驰的小心得,以后再给大家写详细的测评。首先,
王美华18岁结婚,3年连生2子,离婚45年仍忘不了前夫曾志伟1974年,曾志伟对年仅18岁的王美华说嫁给我吧,我爸妈想让我们结婚。一句不太真诚的话,让王美华有些不舒服。但她还是义无反顾地嫁了,甚至在后来曾志伟说我可能要出去玩三年,你要忍住。这事不止李易峰,可也恰恰证明娱乐圈最不敢信的,就是明星人设李易峰,真的凉凉了。但在此之前,他身上却有一个广为流传的美谈。一次,曾经有一个年轻漂亮的美女记者采访了他,值得一提的是,这位美女记者是他的忠粉。采访结束后,两人坐在那里又聊了一会,娱乐圈7大好男人,爱妻又专一,个个都是李易峰的好榜样头条创作挑战赛这几天,娱乐圈再出惊天大瓜,被称为国民校草的单身好男人李易峰,因多次PC塌房了。消息一出,舆论哗然,令人不可思议。所谓人不可貌相,海水不可斗量,在李易峰身上体现得淋漓鸣镝适老版APP为何能收获年轻粉丝?如今,越来越多的手机APP都推出了适老版。这种APP不但没有广告,没有弹窗,而且界面也更干净,让人方便操作。它的推出不但成功被老年群体接受,还意外收获了一批年轻粉丝。许多年轻用户表针对美国打压,尹锡悦发起反击,所谓的美韩同盟,到处都是裂痕虽然在尹锡悦上台后,美韩关系看似更加紧密,然而背后实则暗流涌动,两个国家都打着自己的算盘。前段时间,美方率先动手,重拳打压了韩国的电动车与芯片产业。惊怒之下的韩国发起还击,对两家美光刻机突破90nm,芯片可量产14nm,中国半导体呈合围之势中国半导体各司其职,相关企业在各自的领域内发展突破。而在国内的半导体产业中,上海承担起重要的职责。上海素有东方芯港的称号,汇聚了诸多顶尖的半导体企业以及人才,目前已经形成了2500对华出口遭限制后,英伟达市值蒸发288亿美元,季度亏损预计达4亿约莫半个月前,美国政府要求美国本土两大芯片巨头英伟达AMD停止对华供应高端人工智能芯片,英伟达同美国政府展开了斡旋,争取到了部分豁免权。可惜英伟达的操作并没能力挽狂澜,美国芯片法案消息称中国广电5G将于9月27日正式商用,启动5G套餐六折优惠活动IT之家9月17日消息,在9月15日举行的2022中国信息通信业发展高层论坛上,中国广电副总经理徐达透露,今年6月27日,中国广电正式启动了5G试商用,高效开启了广电5G网络的服务聂小雨转型运动媛?露美背秀身材,网友挂羊头卖狗肉众所周知,如今的网络平台上有许多女网红凭借着擦边的视频内容走红,她们不仅热衷于浓妆艳抹的打扮,还喜欢在镜头前展示出极具暗示性的肢体语言。最著名的两位擦边女网红自然就是聂小雨和痞幼了49。9!5G手机迎拐点?网友华为冲锋,苹果享胜利果实众所周知,5G手机时代的开启,最大的功臣当属华为。国内第一部5G手机就是华为Mate20X,这部手机的发布时间是2019年7月,至今已经过去3年了。据Counterpoint发布的14岁背篓少年靠网球走出大山每天早晨5点训练,穿坏54双鞋,曾和李娜同台比赛黝黑的皮肤,质朴的笑容,面对镜头咬着舌尖一脸稚气,背篓里装着两副网球拍,再加上冠军头衔所有元素交织在一起,让背篓少年成了如今中国体育圈最火的话题。这位背篓少年正是14岁的王发,一位