LeetCode-143. 重排链表【栈 递归 链表 双指针】

news2024/9/24 17:16:32

LeetCode-143. 重排链表【栈 递归 链表 双指针】

  • 题目描述:
  • 解题思路一:找到中点,翻转后半段链表。然后依次改变指针顺序即可。
  • 解题思路二:0
  • 解题思路三:0

题目描述:

给定一个单链表 L 的头节点 head ,单链表 L 表示为:

L0 → L1 → … → Ln - 1 → Ln
请将其重新排列后变为:

L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …
不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 1:
在这里插入图片描述
输入:head = [1,2,3,4]
输出:[1,4,2,3]
示例 2:

在这里插入图片描述
输入:head = [1,2,3,4,5]
输出:[1,5,2,4,3]

提示:

链表的长度范围为 [1, 5 * 104]
1 <= node.val <= 1000

解题思路一:找到中点,翻转后半段链表。然后依次改变指针顺序即可。

问:循环条件 while head2.next 为什么不能写成 while head2?

答:如果链表长度为偶数,例如链表由 [1,2,3,4]四个节点组成,那么找中间节点并反转后,我们得到的两个链表分别为 head=[1,2,3] 和 head2=[4,3]。注意它俩都包含节点 3。如果写成 while head2,会导致最后一轮循环中 3 指向它自己。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def middleNode(self, head: Optional[ListNode]) -> None:
        slow, fast = head, head
        while fast and fast.next:
            slow = slow.next
            fast = fast.next.next
        return slow
    
    def reverseList(self, head: Optional[ListNode]) -> None:
        pre, cur = None, head
        while cur:
            tmp = cur.next
            cur.next = pre
            pre = cur
            cur = tmp
        return pre
        
    def reorderList(self, head: Optional[ListNode]) -> None:
        mid = self.middleNode(head)
        head2 = self.reverseList(mid)
        # copy_head = head
        while head2.next:
            tmp1 = head.next
            tmp2 = head2.next
            head.next = head2
            head2.next = tmp1
            head = tmp1
            head2 = tmp2
        # print(copy_head) 最终只需地址对应即可

时间复杂度:O(n)
空间复杂度:O(1)

解题思路二:0


时间复杂度:O(n)
空间复杂度:O(n)

解题思路三:0


时间复杂度:O(n)
空间复杂度:O(n)

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

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

相关文章

更优性能与性价比,从自建 ELK 迁移到 SLS 开始

作者&#xff1a;荆磊 背景 ELK (Elasticsearch、Logstash、Kibana) 是当下开源领域主流的日志解决方案&#xff0c;在可观测场景下有比较广泛的应用。 随着数字化进程加速&#xff0c;机器数据日志增加&#xff0c;自建 ELK 在面临大规模数据、查询性能等方面有较多问题和挑…

Ubuntu20.04版本部署MySQL8.0关闭库名表名区分大小写和自定义数据目录(datadir)路径

本篇文章记录关闭数据库表名库名区分大小写和设置自定义数据目录&#xff0c;安装时建议一个一个步骤进行&#xff0c;这样比较容易成功&#xff0c;下面是设置关闭区分表名库名大小写的。 一、关闭库名表名区分大小写 1、先安装数据库 步骤如下&#xff1a; # 第一步:更新…

利用遥感技术反演地表温度的方法与意义

​随着科技的不断进步&#xff0c;遥感技术在地球科学领域的应用变得越来越广泛。其中&#xff0c;利用遥感技术反演地表温度已经成为了一种常见的方法&#xff0c;对于环境监测、气候研究、城市规划等领域具有重要意义。 ​地表温度是指地表或地表以下一定深度范围内的温度&am…

一文了解AI边缘计算盒子是什么产品设备

大家听说过AI边缘计算盒子吗&#xff1f;不知道你有没有注意到&#xff0c;最近这款产品设备在科技圈内可是火得不要不要的&#xff01;那么&#xff0c;它究竟是什么东西呢&#xff1f;别着急&#xff0c;小编我今天就来给大家揭晓。 边缘计算盒子是什么? 边缘计算盒子是一种…

Web项目性能测试 —— 性能分析

从结果摘要、并发数、平均事务响应时间、每秒点击数、业务成功率、系统资源、网页细分图、Web服务器资源、数据库服务器资源等几个方面分析&#xff0c;如图1- 1所示。 性能测试结果分析的一个重要的原则是以性能测试的需求指标为导向。我们回顾一下本次性能测试的目的&#x…

C#硬件接口开发------一文了解WMI

&#x1f388;个人主页&#xff1a;靓仔很忙i &#x1f4bb;B 站主页&#xff1a;&#x1f449;B站&#x1f448; &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C# 硬件接口开发 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足…

【数据结构】第三节:单链表

前言 本篇要求掌握的C语言基础知识&#xff1a;指针、结构体 目录 前言 单链表 概念 对比链表和顺序表 创建链表 实现单链表 准备工作 打印链表 创建节点并初始化 尾插 二级指针的调用 尾插代码 头插 尾删 头删 查找&#xff08;返回节点&#xff09; 在指定位…

C++生成动态库,C++和C#以及Java在windows和linux调用

Windows生成dllC库 1、创建动态链接库项目 源文件编写函数 // dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h"int sum(int a, int b) {return a b; }BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) {switch…

震动Github榜!7K Star火爆的数字人竟然开源了,拿走不谢(文末福利免费领)

本号专注于分享Github和Gitee上的高质量开源项目&#xff0c;并致力于推动前沿技术的分享。 软件介绍 Fay数字人框架-带货版是一个用于构建数字人应用场景的开源项目&#xff0c;具有低耦合度的各功能模块。你可以轻松更换声音来源、语音识别、情绪分析、NLP处理、情绪语音合成…

内网渗透-内网环境下的横向移动总结

内网环境下的横向移动总结 文章目录 内网环境下的横向移动总结前言横向移动威胁 威胁密码安全 威胁主机安全 威胁信息安全横向移动威胁的特点 利用psexec 利用psexec.exe工具msf中的psexec 利用windows服务 sc命令 1.与靶机建立ipc连接2.拷贝exe到主机系统上3.在靶机上创建一个…

【我的代码生成器】生成React页面类

有了数据表的结构信息&#xff0c;就能生成React 的页面类&#xff0c;快捷方便。 生成界面如下&#xff1a; 生成的React FrmUser.js页面如下&#xff1a; 只需再写里面的操作逻辑代码。

SinoDB创建、更改、删除索引

SinoDB数据库的索引组织方式有两种&#xff1a;B树索引与R树索引。B 树是大多数数据库所采用的索引组织方式。R 树索引作为表的辅助访问方法&#xff0c;主要用于查找多维空间数据。本文主要讨论B 树索引。 1. B 树索引 B 树索引按级别进行组织。最高级别包含指向真实的数据的…

家庭网络防御系统搭建-将NDR系统的zeek日志集成到security onion

在前面的文章中安装了zeek,这里&#xff0c;安装了securityonion&#xff0c;这里&#xff0c;本文讲述如何将zeek生成的日志发送到siem security onion之中。 所有日志集成的步骤分为如下几步&#xff1a; 日志收集配置日志发送接收日志解析配置日志展示配置 ZEEK日志收集配…

初识three.js创建第一个threejs3D页面

说到3D&#xff0c;想必大家都能想到three.js&#xff0c;它是由WebGL封装出来的&#xff0c;接下来&#xff0c;我手把手教大家创建一个简单的3D页面 话尽在代码中&#xff0c;哈哈 大家可以复制代码玩一下 <!DOCTYPE html> <html lang"en"><head&…

华为昇腾AI芯片加持,9.1k Star 的 Open-Sora-Plan,国产Sora要来了吗

Aitrainee | 公众号&#xff1a;AI进修生 哇&#xff0c;今天Github趋势榜第一啊&#xff0c;为了重现Sora&#xff0c;北大这个Open-Sora-Plan&#xff0c;希望通过开源社区力量的复现Sora&#xff0c;目前已支持国产AI芯片(华为昇腾&#xff09;&#xff0c;这回不用被卡脖子…

【iOS】SDWebImage源码阅读笔记

文章目录 前言一、设计目的二、特性三、用法1.UITableView 中使用 UIImageViewWebCache2.使用回调Blocks3.SDWebImageManager 的使用4.单独使用 SDWebImageDownloader 异步下载图片5.单独使用 SDImageCache 异步缓存图片 四、实现原理五、具体实现流程sd_setImageWithURLsd_int…

实习僧网站的实习岗位信息分析

目录 背景描述数据说明数据集来源问题描述分析目标以及导入模块1. 数据导入2. 数据基本信息和基本处理3. 数据处理3.1 新建data_clean数据框3.2 数值型数据处理3.2.1 “auth_capital”&#xff08;注册资本&#xff09;3.2.2 “day_per_week”&#xff08;每周工作天数&#xf…

Matlab-AMF算法(自适应中值滤波Adaptive Median Filtering)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 实现原理 AMF&#xff08;Adaptive Median Filter&#xff0c;自适应中值滤波&#xff09;是一种用于图像处理和信号处理的滤波算…

OpenHarmony南向开发案例:【智能垃圾桶】

样例简介 智能垃圾桶可以通过数字管家应用来监测垃圾桶当前可用容量&#xff0c;提醒主人及时处理垃圾&#xff1b;通过日程管家可以实现和其他智能设备联动。 核心组件位置功能距离传感器置于垃圾桶盖内侧感应垃圾量红外传感器置于垃圾桶前端感应是否有人靠近光敏电阻开发板…

SpringMvc文件上传下载案例

1、文件上传 文件上传功能如下&#xff1a; 客户端使用ElementPlus上传文件 服务器使用 SpringMvc接收文件 1.1客户端代码 ElementPlus的<el-upload>可以非常方便的处理文件上传功能&#xff0c;即美观又强大。 传送门--》 upload组件文档 1.1.1、使用axios工具上传…