OJ题
文章平均质量分 75
明 日 香
快和我一起快乐学习
展开
-
经典OJ题:重排链表
设置一个新的链表,在设置两个指针分别指向新链表和原链表,指向原链表的指针进行遍历,遍历到需要的节点后进行尾插操作,插入新链表中,最后返回新链表。链表的反转,经过多次的实验和画图,我们知道链表可以分为两种,分别是偶数节点个数的链表,另一个是奇数节点个数的链表,因此二者的中间节点也不一样。而又通过链表的合并操作,我们得知,在这一步操作中,如果不把链表拆分成两条链表,那么之后的合并链表将会变得十分的艰难。对于方法二,需要三种操作,寻找中间节点、链表反转、链表合并连接。原创 2023-11-12 19:07:17 · 185 阅读 · 2 评论 -
经典OJ题:奇偶链表
然后,使用尾插的方式,在判断某一节点的索引位的奇偶后,进行插入到两个带头的哨兵链表中。,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。设置两个带有哨兵位的带头节点,分别记住两个哨兵位节点的地址。在设置一个计数变量,负责计数该节点的索引位,负责之后的判断。请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。最后,奇数链表连接偶数链表,释放哨兵位节点,得出答案。如上图所示,方法一写完之后会超出题目要求的时间复杂度。的时间复杂度下解决这个问题。原创 2023-11-11 20:55:31 · 127 阅读 · 5 评论 -
经典OJ题:随机链表的复制
目录题目:本题的解图关键在于画图与看图! 思路分析:方法一:暴力求解法。方法二:插入法方法解析: 步骤一、插入步骤二、 处理每一个copy的randdom指针⭐————重点步骤三、拆卸节点代码演示: 给你一个长度为 的链表,每个节点包含一个额外增加的随机指针 ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 指针和 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表原创 2023-11-09 20:03:44 · 211 阅读 · 9 评论 -
经典OJ题:单链表的回文结构
但是对于链表而言,回文结构的判断分为了两种情况,第一种,链表是奇数节点的链表,即链表的节点个数是奇数,第二种,链表是偶数节点,即链表的个数是偶数。对于偶数节点的链表,对于链表的拆分并不会有多大的影响,而对于奇数而言,则会影响中间节点的归属问题和指向确认问题。所谓的回文结构就是将一组数值分为两个部分,并用取一个中间值,除去中间值外,其他的数值都是一一镜面对称相同。想要判断一个链表是否是回文结构,我们第一个想到的就是对链表的另一半进行拆分,组建一个新的链表。,请返回一个bool值,代表其是否为回文结构。原创 2023-11-09 17:06:12 · 134 阅读 · 2 评论 -
经典OJ题:环形节点是否存在!
给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。pos不作为参数进行传递。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回true。否则,返回false。原创 2023-11-07 23:20:30 · 88 阅读 · 10 评论 -
经典OJ题:单链表相交
也就是说,设立两个指针前,得出两个链表的长度,之后算出长度差,然后将较长的那个链表设置为long指针指向,然后long指针先再这个链表中走出对应的长度差后,和另一个指针short一起按照相同的速度朝前走,并且同时进行对比判断,当两个指针指向的空间地址一样时,那么返回指针,得出相交的节点。又假设,设立两个指针,分别指向两两个链表的节点,并且判断两个节点中的数据是否一样,如果一样,则找到了交点,但是链表中的数据并没有说明是不重复的,很容易出现错误,如下图所示。有两个链表A、B,返回链表A、B相交的节点。原创 2023-11-07 23:09:57 · 654 阅读 · 1 评论 -
经典OJ题:链表中的倒数第K个节点
转化为代码,就是先让fast走到和头节点相差距离为K的节点位置,然后fast和slow同时向前移动一个节点的距离位置,直到fast==NULL。所以利用这个K,进行一个距离差,也就是将fast和slow之间的距离变成K并且按照同样的速度向前运动,直到fast走到NULL。可以线统计链表的节点个数,然后用链表节点的个数减去K,得出倒数第K个节点的前一个节点到头节点的节点个数。之后使用循环遍历,遍历到倒数第K个节点的前一个节点,随后输出下一个节点。因为所求的是倒数第K个节点,所以这个节点到尾节点的距离是K。原创 2023-11-07 22:28:33 · 118 阅读 · 3 评论 -
经典OJ题:找环节点——代码解析
对于第一种:寻找节点中的数据是否一样来判断是否是环形,无非是判断节点内部的数据是否一致,但是这种判断方法过于的愚蠢,因为节点的数据是可以重复的,而且节点内的数据是不重复的!首先,我们要知道一点,如果fast走两步slow走一步,不论如何,fast都会比slow快一圈,而slow会比fast慢几步,因此我们可以得出结论,fast总是能和slow走到相同的节点位置,也就是二者总会相等的。返回链表开始入环的第一个节点:就是进入环型后的第一个节点,如下图示例1中的 数据为2的节点。返回链表开始入环的第一个节点。原创 2023-11-06 23:53:41 · 159 阅读 · 9 评论 -
单链表经典OJ题:移除元素
移除元素就是先找到该元素所在的位置,然后将该元素所在节点的指向下一个节点赋给该元素所在的节点位置的前一个节点。注意当第一个节点到新链表后,头指针和尾指针是同时指向第一个节点的,但是之后就只有尾节点开始移动 。原创 2023-10-15 11:57:05 · 157 阅读 · 8 评论 -
单链表经典OJ题:反转链表
给你单链表的头节点 head ,i请你反转链表,并返回反转后的链表。原创 2023-10-18 19:44:27 · 297 阅读 · 3 评论 -
单链表经典OJ题:合并有序链表
因为一开始就是非空的存在,所以不需要使用newHead = newTail = cur2;然后在使用两个指针当作新链表的头指针和尾指针,一开始两个指针是相同的,但伴随着比较后第一个节点的到来,尾指针开始进行挪动,头指针不变动。如上图所示,本质其实就是比较节点和节点直接的大小,然后进行排序,小的在前,大的在后,需要使用插入节点的方法。分别定义两个指针指向两个链表的头节点,然后开始进行遍历比较,比较结果小的放到新链表中。新链表是通过拼接给定的两个链表的所有。直接一开始两个指针就指向新链表第二个节点的位置。原创 2023-10-18 20:47:15 · 138 阅读 · 1 评论 -
单链表经典OJ题:找出链表的中间节点
当然,链表的节点个数也分为偶数和奇数,当为偶数节点时,快指针fast要抵达NULL位置,才能找到指定位置。如图所示,当快指针走到最后一个节点位置的时候,慢指针刚好在中间节点的位置。给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。原创 2023-10-18 21:18:31 · 234 阅读 · 2 评论 -
环形链表的约瑟夫问题
据说著名犹太历史学家Josephus有过如下故事:在罗马人占领乔塔帕特后,39个犹太人和Josephus及他的朋友躲进一个洞里,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈。由第一个人开始报数,报数到3的人就自杀,再由下一个人重新报1,报数到3的人就自杀,这样依次下去,知道剩下最后一个人时,那个人可以自由选择自己的命运。这就是著名的约瑟夫问题。现在请用单向链表描述该结构并呈现整个自杀过程。原创 2023-10-19 18:18:02 · 140 阅读 · 2 评论 -
单链表经典OJ题 :分割链表
创造的两个链表分别为大链表和小链表,大链表存放等于大于指定值的节点,小链表存放小于指定值的节点,最后把小链表中的最后一个节点中的指针指向大链表的第一个节点。给定一个数值,让每一个节点的内部数据和该数值进行比较,比数值小的节点放在前端,和数值相等的节点放在后端,不在乎是否是有序排列。且根据之前合并有序链表的经验,我们为了避免代码的重复性,选择使用两条带头链表,以此避免对链表是否为空的重复判断。注意:因为创建的是带头链表,所以小链表最终指向的是大链表的第二个节点,且最后返回的是小链表的第二个节点。原创 2023-10-19 17:11:57 · 111 阅读 · 2 评论