[python 刷题] 143 Reorder List

news2024/12/23 19:36:27

[python 刷题] 143 Reorder List

题目:

You are given the head of a singly linked-list. The list can be represented as:

L 0 → L 1 → … → L n − 1 → L n L_0 → L_1 → … → L_{n - 1} → L_n L0L1Ln1Ln

Reorder the list to be on the following form:

L 0 → L n → L 1 → L n − 1 → L 2 → L n − 2 → … L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … L0LnL1Ln1L2Ln2

You may not modify the values in the list’s nodes. Only nodes themselves may be changed.

这道题虽然说不允许修改链表结点上的值,但是改了也能过……那样的解法就是将所有的值保存在一个数组里,然后遍历整个数组,通过判断数组当前所在的结点去修改值。

当然,因为这道题已经明确说了,不允许修改链表结点上的值, 所以这种是能过但是面试情况下是不行的情况 🙅

正确的做法是找到链表的一半,翻转后半段,再一个个交替串联,所以这种情况下来说,[JavaScript 刷题] 链表 - 反转链表, leetcode 206 可以算是这道题的前置题。

这道题唯一需要注意一点的地方在于寻找的中点。

当链表长度为偶数时:

在这里插入图片描述

当链表长度为奇数时:

在这里插入图片描述

这个时候对链表进行反转并不会产生理想的效果,反而会让中点有两个头,产生这样的效果:

在这里插入图片描述

在这里插入图片描述

这样也就意味着会产生环形链表,所以正确的做法是找到中点前的结点 prev,在完成翻转后,将 prev 指向空,这样就有了两个不相关的链表,也就不会出现环形链表的情况

最终解法如下:

class Solution:
    def reorderList(self, head: Optional[ListNode]) -> None:
        """
        Do not return anything, modify head in-place instead.
        """
        l_fast, l_slow = head.next, head
        while l_fast and l_fast.next:
            l_slow = l_slow.next
            l_fast = l_fast.next
            l_fast = l_fast.next

        def reverse(node):
            if not node or not node.next:
                return node

            new_head = reverse(node.next)
            node.next.next = node
            node.next = None

            return new_head

        l_reversed = reverse(l_slow.next)
        l_slow.next = None

        while l_reversed:
            temp1, temp2 = head.next, l_reversed.next
            head.next = l_reversed
            l_reversed.next = temp1
            head, l_reversed = temp1, temp2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1100988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安装SSL证书提示不信任,怎么办?

随着越来越多的SSL证书错误的状况出现,经常有“SSL证书不受信任怎么办”这类的难题,而且对这种难题很头痛,以下是JoySSL公司常见的SSL证书不受信任的缘故及解决方案。 1.证书过期 网络证书跟我们的纸质证书一样,他都会有一个有效期…

K 近邻算法解析: 从原理到实践的机器学习指南

机器学习 第三课 k 近邻 概述机器学习简介K 近邻算法K 近邻中的距离欧氏距离曼哈顿距离余弦相似度 选择合适的 K 值奇数 vs 偶数通过交叉验证选择 k 值 实战分类问题回归问题 K 近邻算法的优缺点优点缺点 手把手实现 k 近邻手搓算法实战分类 概述 机器学习 (Machine Learning)…

OWASP TOP 10-注入-SQL注入

文章目录 OWASP TOP 10注入注入的分类SQL注入SQL注入的危害:sqlmap自动化注入注入类型回显注入盲注时间注入不同请求方式的注入特殊位置的注入利用DNSLOG注入基于报错的注入二阶注入宽字节注入堆叠注入sql注入读写文件 OWASP TOP 10 A1:2017 注入 A2&am…

luming.02无限进步 #我的创作纪念日

前言:今天早上起床后,看见CSDN官方小助手发来一条系统通知,刚好没什么事,就点开分享分享我的创作经历 luming.02 ,不知不觉今天已经是你成为创作者的 第128天 啦,为了纪念这一天,我们为您准备了…

DS线性表之栈和队列

前言 我们前面已经介绍并实现了顺序表和链表以及介绍了他们的优缺点!本期我们再来学习一个基本数据结构栈和队列~!这里的栈可不是内存的那个栈,内存的那个栈是操作系统的概念,而这个栈是数据结构的栈,是一个容器。他们…

二叉树相关算法

1、二叉树基本操作 二叉树的定义就不在这里多说了,下面这个图就是一个简单的二叉树: 二叉树的三种遍历方式: 前序遍历:头左右,也就是先头后左再右:1245367 public static void prePrint(BinaryTreeNode …

黑豹程序员-架构师学习路线图-百科:MySQL

文章目录 1、什么是MySQL2、MySQL受喜爱程度经典四人组: 3、发展历史4、MariaDB 1、什么是MySQL MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 …

彻底搞懂:防止表单重复提交,前端限制还是后端限制?

欢迎大家来到小米的技术分享专栏!今天我将为大家带来一个热门话题:如何有效地防止表单重复提交。在开发中,我们常常会遇到这样的问题:用户频繁点击提交按钮,导致数据重复提交,给系统和用户体验带来不必要的…

python项目之统一身份认证协议设计与实现

项目简介 统一身份认证协议设计实现了以下功能: 通过以首页设计、服务管理设计、日志管理设计、用户的信息管理等内容来完成对整个系统的功能模块的设计。 服务管理来完成对统一身份认证的系统整体管理,包括的对托管的注册服务功能管理、对于系统网址的…

第七章 网络安全 | 计算机网络(谢希仁 第八版)

文章目录 第七章 网络安全7.1 网络安全问题概述7.1.1 计算机网络面临的安全性威胁7.1.2 安全的计算机网络7.1.3 数据加密模型 7.2 两类密码体制7.2.1 对称密钥密码体制7.2.2 公钥密码体制 7.3 数字签名7.4 鉴别7.4.1 报文鉴别7.4.2 实体鉴别 7.5 密钥分配7.5.1 对称密钥的分配7…

跟着Datawhale打一场时序比赛(SEED新能源赛道-电动汽车充电站充电需求预测)之打卡笔记一

最近Datawhale又开始组织打比赛的培训学习了,很早就认识了这个专业的学习组织,跟着他们也学过不少竞赛知识,但是还没完全打完过一场赛事;所以这次打算跟着Datawhale打这场时序的比赛 —> 2023“SEED”第四届江苏大数据开发与应…

5.1 加载矢量图层(ogr,gpx)

文章目录 前言加载矢量(vector)图层ogrShapefileQGis导入.shp文件代码导入 gpxQGis导入GPX文件代码导入 gpkgQGis导入GPKG文件代码导入 geojsonQGis导入GeoJson文件代码导入 gmlQGis导入GML代码导入 kml/kmzQGis导入Kml代码导入 dxf/dwgQGis导入dxf代码导入 CoverageQGis导入Co…

2023年全球及中国多肽CDMO市场发展概述分析:CDMO头部企业将拓展至多肽领域[图]

多肽药物是指通过生物合成法或者化学合成法获得的具有特定治疗作用的多肽,多肽药物的分子量介于小分子化药和蛋白质类药物之间,形成了其独特药学空间。多肽药物相比于小分子化药及蛋白质类药物的优势在其发展过程中被逐渐发掘,其在质量控制水…

提升医疗服务质量:将互联网医院源码应用于实践

随着科技的快速发展,医疗行业也亟需寻求创新的解决方案来提升服务质量。在这个数字化时代,互联网医院源码成为了引人注目的选择,为医疗机构和患者之间的沟通和协作提供了前所未有的便利。作为该领域的专家,我将介绍互联网医院源码…

vscode工程屏蔽不使用的文件夹或文件的方法

一. 简介 vscode是一款 微软提供的免费的代码编辑软件。 对于 IMX6ULL-ALPHA开发板而言,NXP官方uboot一定会支持不止 IMX6ULL芯片的代码,也不止支持 一种架构,还支持其他芯片或架构的源码文件。 为了方便阅读代码,vscode软件可…

Java反射调用jar包实现多态

上一篇实现了反射调用jar包,但是没有实现多态,这次先给自己的jar包类抽象一个接口,然后实现类实现接口。最后调用放反射得到的对像转换成接口类型调用执行。 定义接口,指定包为ZLZJar package ZLZJar;public interface ITest {p…

优思学院|改变游戏规则:六西格玛的奇迹力量!

在当今全球竞争激烈的商业环境中,企业家们正在寻找各种方法来提高效率、降低成本并确保顶级质量。在这个追求卓越的道路上,六西格玛以其卓越的数据分析、问题解决和流程优化能力脱颖而出。那么,六西格玛到底是什么,它是如何改变游…

郝培强专访:创业失败、抑郁症和自媒体爆款

近日,我对郝培强(网名:Tinyfool)老师做了一场视频采访(可关注“Micro SaaS开发者公会视频号”观看原视频)。70后的Tinyfool是多年资深的创业者、开发者,研发或者技术服务过六间房、有道词典、大…

每日一题 2652. 倍数求和(简单)

最简单的做法,遍历求和,时间O(n) class Solution:def sumOfMultiples(self, n: int) -> int:return sum([i if (i % 3 0) or (i % 5 0) or (i % 7 0) else 0 for i in range(n 1)])如果只求在 [1,n] 内能被m整除的数之和,那么 ans (…

IP地址,端口,域名校验

需求: validateAddress(address) {const parts address.split(:); //例子:[192.168.0.55, 2022]const host parts[0];const port Number(parts[1]);if (/^[0-9]\.[0-9]\.[0-9]\.[0-9]$/.test(host)) {// 是 IP 地址const octets host.split(.);if (…