logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

92. 反转链表 II - 力扣(LeetCode)

cur.next 指向 pre.next(节点 1 的 next 是节点 2,所以 cur.next 指向节点 2,形成循环)。cur.next 指向 pre.next(节点 2),将节点 3 插入到节点 2 后面。cur.next 指向 pre.next(节点 3),将节点 4 插入到节点 3 后面。此时节点 2 tail.next 指向 nxt(节点 4),保持剩余链表的连接。pre.next

文章图片
#python#算法#数据结构 +2
25. K 个一组翻转链表 - 力扣(LeetCode)

首先统计链表的节点个数,这样可以知道是否还有足够的节点来进行分组反转。创建虚拟头节点:dummy.next = 1 -> 2 -> 3 -> 4 -> 5 -> None。这可以简化边界条件的处理,比如当链表为空或者只有一个节点时的操作。假设链表为 1 -> 2 -> 3 -> 4 -> 5 -> None,k=2。在每次处理时,通过一个循环逐个反转节点,保存当前节点的下一个节点到。最终链表为 2

文章图片
#链表#leetcode#数据结构 +2
160. 相交链表 - 力扣(LeetCode)

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3。输入:intersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B

文章图片
#算法#链表#leetcode +1
148. 排序链表 - 力扣(LeetCode)

调用 sortList(head),链表为 4 → 2 → 1 → 3 → 5 → 6。比较 5 和 6,选择 5,结果链表为 1 → 2 → 3 → 4 → 5。比较 4 和 5,选择 4,结果链表为 1 → 2 → 3 → 4。最终合并后的链表为:1 → 2 → 3 → 4 → 5 → 6。假设有一个链表:4 → 2 → 1 → 3 → 5 → 6。最终结果应该是:1 → 2 → 3 → 4

文章图片
#python#leetcode#算法 +2
206. 反转链表 - 力扣(LeetCode)

调用 reverseList(head.next),即对节点 2 -> 3 -> 4 -> 5 进行反转。同样的操作依次在节点 3、2、1 上进行,最终整个链表反转为 5 -> 4 -> 3 -> 2 -> 1。递归一直进行到 head 指向节点 5 时,head.next 为空,返回 head(节点 5)。执行 head.next.next = head,即节点 5 的 next 指向节点 4。

文章图片
#python#算法#leetcode +2
234. 回文链表 - 力扣(LeetCode)

然后将反转后的链表与前半段未反转的链表做比较,直到中间节点如果对应相同,则为回文数。将反转后的后半部分链表与原链表的前半部分逐个节点比较,如果所有对应节点的值都相等,则链表是回文的;fast 和 fast.next 都存在(fast 指向 1,fast.next 指向 2)。从中间节点开始,逐个将节点从原链表中取出,并将其插入到新链表的头部,从而实现反转。此时,反转后的后半部分链表为 1 -> 2

#python#开发语言#leetcode +2
到底了