2.链表
文章平均质量分 60
链表算法LC
pig不会cv
这个作者很懒,什么都没留下…
展开
-
2.7环形链表(LC142-M)
slow和fast还没循环玩,就开始比较是否相遇,那走第一步的时候就能发现,肯定没相遇,直接返回None了。快慢指针相遇前,指针走的次数小于链表长度,快慢指针相遇后,两个index指针走的次数也小于链表长度,总体为走的次数小于 2n。双指针法,fast比slow快一步,先判断能否相遇,能相遇说明有环;因为fast指针是一步走两个节点,slow指针一步走一个节点, 所以。2(x+y)=x+n(y+z),n为两指针相遇前fast走的圈数。要求返回结点,而我在没有找到环时返回了-1,是一个int。原创 2023-10-20 10:32:54 · 20 阅读 · 0 评论 -
2.6链表相交(LC面试题0207—E)
原因:无相交时,我是让nodeA指向B链表,返回nodeA值,所以NodeA有值,不会返回None。所以相不相交的逻辑都是一样,p和q走过的路径长度也一样,最后若相交,就返回p、q任意一个指针,若不相交,则p、q就是none。遍历两个链表,找到相交的部分,比如示例1,就是在8,4,5相交,返回相交部分的初始值,即8;报错了:A和B链表可能是空的,这个时候就没有办法循环了,所以循环条件要加上A、B非空。假设A和B要相交,则p、q走到相交点的距离一定是相同的。若链表相交,则p走过a、c、b;原创 2023-10-16 10:49:13 · 34 阅读 · 1 评论 -
2.5删除链表的第n个结点(LC19—M)
快指针先移动n步,提前找到要删除的结点,然后快慢指针再同时移动。而慢指针应该指向被删除结点的前一个,所以是n+1。fast起查询作用,low删除结点。fast指针要比slow指针快n+1步。第一次只写一遍就写出正确代码了哎!给你一个链表,删除链表的。,并且返回链表的头结点。原创 2023-10-16 08:48:06 · 51 阅读 · 1 评论 -
2.4 两两交换链表中的节点(LC24—M)
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。原创 2023-10-15 11:10:03 · 27 阅读 · 1 评论 -
2.3反转链表(LC206—E,面试常考)
pre永远是cur前一个指针,当cur.next指向pre后,pre应该后移遍历:pre = cur。然后就要开始反转了,首先要把 cur->next 节点用tmp指针保存一下,也就是保存一下这个节点。双指针法:需要改变链表的next指针的指向,直接将链表反转 ,而不用重新定义一个新的链表。首先定义一个cur指针,指向头结点,再定义一个pre指针,初始化为null。为什么要保存一下这个节点呢,因为接下来要改变 cur->next 的指向了,最后,cur 指针已经指向了null,循环结束,链表也反转完毕了。原创 2023-10-15 09:26:35 · 31 阅读 · 1 评论 -
2.2设计链表(LC707-M)
实现index-1valvalvalindexindexindexindex遍历链表时要定义一个指针,初始指向head;最后返回链表的头结点插入节点时要注意代码的顺序:若先蓝后红,则python中会自动释放head节点,就无法先红框代码了。原创 2023-10-14 11:37:58 · 30 阅读 · 1 评论 -
2.1移除链表元素(LC203-E)
原因:假如给定链表[7],val=7。则cur.next,val=7,但是cur.next.next不存在。仍然指向原始链表中的同一个节点。这导致了一个无限循环,因为循环条件。原因:等于应该是“==”,不等于应该是"!然而,即使在跳过当前节点后,您没有更新。如果相等,您将跳过当前节点,并将。在每次循环迭代时,您都将。原创 2023-10-13 15:34:02 · 35 阅读 · 0 评论 -
2.链表基础
链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。原创 2023-10-13 14:18:09 · 19 阅读 · 0 评论