​LeetCode解法汇总143. 重排链表

news2024/7/2 3:32:42

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:
143. 重排链表


描述:

给定一个单链表 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

解题思路:

/**

* 143. 重排链表

* 解题思路:

* 链表长度5*10^4,所以递归的方式不可取。

* 这题如果使用额外的数据结构,比如把链接转换成数组,那么问题就会变得很简单,所以暂且把目标设置为不使用额外空间。

* 使用快慢指针的策略,快指针走两个节点,慢指针走一个节点,这样,我们可以找到中间节点。

* 然后使用头插法,把中间节点后面的所有节点翻转,生成翻转链表foot

* 重新遍历head链表,直到遍历到middle节点。每次遍历,head和foot链表各取一个

*

*/

代码:

class Solution143
{
public:
    void reorderList(ListNode *head)
    {
        ListNode *quick = head;
        ListNode *slow = head;
        while (true)
        {
            quick = quick->next;
            if (quick == nullptr)
            {
                break;
            }
            slow = slow->next;
            quick = quick->next;
            if (quick == nullptr)
            {
                break;
            }
        }

        // 第二块逻辑
        ListNode *middle = slow;
        ListNode *foot = nullptr;
        ListNode *current = middle;
        while (current != nullptr)
        {
            ListNode *local = current;
            current = current->next;
            local->next = foot;
            foot = local;
        }

        // 第三块逻辑
        ListNode *header = head->next;
        ListNode *footer = foot;
        current = head;
        while (current != middle)
        {
            current->next = footer;  // 1->5
            footer = footer->next;   // footer=>4
            current = current->next; // current=>5

            if (current == middle)
            {
                break;
            }

            current->next = header;  // 5->2
            header = header->next;   // header=>3
            current = current->next; // current=>2
        }
        cout << head->val << endl;
    }
};

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

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

相关文章

资深测试老鸟,APP性能测试-全覆盖测试点(详细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 android的app性能…

QT控件中,便捷定义信号和槽函数

QT控件中&#xff0c;便捷定义信号和槽函数 之前使用的方式为&#xff1a;自定义信号和槽函数 现在使用一种更方便的方式&#xff1a; 点击控件&#xff0c;直接可以调用槽函数了。。。&#xff08;都不用绑定&#xff09; 把另外两个控件都加上

【MySQL】mysql | linux | 离线安装mysqldump

一、说明 1、项目要求离线安装mysqldump 2、数据库服务已经使用docker进行安装&#xff0c;但是其他项目依赖mysqldump&#xff0c;所以需要在宿主机上安装mysqldum 二、解决方案 1、下载依赖 https://downloads.mysql.com/archives/community/ 2、下载内容 mysql-community-c…

uniapp小程序警告:[sitemap 索引情况提示]

这个并不算是报错&#xff0c;只是一个警告提示&#xff0c;提示开发者哪些页面被微信收录了&#xff08;代表这个页面可以在微信的搜索中被搜到&#xff09;&#xff0c;sitemap 的索引提示是默认开启的&#xff0c;如需要关闭 sitemap 的索引提示&#xff0c;可在小程序项目配…

【腾讯云 Cloud Studio 实战训练营】当我还在恐龙扛狼,隔壁IDE竟然已经卷成这样了

文章目录 前言关于cloud studio功能介绍账号注册小试牛刀深度体验使用场景和产品优势总结 手动bgm&#xff1a;沃没K~ 恐龙扛浪扛浪扛~ 恐龙扛浪扛浪扛~ 沃没K~ 布鲁biu布鲁biu~ 前言 上周很荣幸被邀请体验一款腾讯的新产品cloud studio&#xff0c;是一款在线ide&#xff0c;…

多元函数的极值和最值

目录 无约束极值 极值的必要条件 驻点和极值点的关系 多元函数极值点可能取的点&#xff1a; 极值的充分条件 条件极值与拉格朗日乘数法 最大最小值 例题 例题1&#xff1a; 例题2&#xff1a; ​编辑 例题3&#xff1a; 例题4&#xff1a; ​编辑 例题5&#xff1a; 例…

DuDuTalk:AI语音工牌如何帮助教培公司高效管理课程顾问团队

近年来&#xff0c;随着人工智能的快速发展&#xff0c;越来越多的公司开始利用AI技术来提高工作效率和管理效果。在教育培训行业中&#xff0c;课程顾问团队的管理对于公司的运营和发展至关重要。 而在实际管理中&#xff0c;受教培人员素质参差不齐&#xff0c;能力差异大&a…

Java课题笔记~Maven基础知识

一、什么是Maven&#xff1f; Maven是专门用于管理和构建Java项目的工具。 它的主要功能有&#xff1a; 提供了一套标准化的项目结构提供了一套标准化的构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xff0c;发布……&#xff09;提供了一套依赖管理机制 …

python小游戏课程设计报告,python游戏课程设计报告

大家好&#xff0c;给大家分享一下python2048游戏课程设计报告&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01;

安装java11( 安装jdk11)记录

下载JDK11 国内华为镜像下载&#xff1a;https://repo.huaweicloud.com/java/jdk/11.0.29/injdk 镜像下载&#xff1a;https://www.injdk.cn/官网下载&#xff1a;https://www.oracle.com/java/technologies/downloads/#java11 个人使用华为镜像下载 安装 下载后上传至Lin…

用DBeaver进行数据备份与恢复

一、数据备份 1、选择需要备份的数据库或数据表&#xff0c;鼠标右击。 2、选择“工具-转存数据库” 3、勾选需要导出备份的数据库和数据表 可自行设置&#xff0c;这里直接点击开始&#xff1b; 导出完成 二、数据恢复 1、选择需要恢复的数据库或数据表&#xff0c;鼠标右…

数学建模学习(8):单目标和多目标规划

优化问题描述 优化 优化算法是指在满足一定条件下,在众多方案中或者参数中最优方案,或者参数值,以使得某个或者多个功能指标达到最优,或使得系统的某些性能指标达到最大值或者最小值 线性规划 线性规划是指目标函数和约束都是线性的情况 [x,fval]linprog(f,A,b,Aeq,Beq,LB,U…

【C语言】通讯录2.0 (动态增长版)

前言 通讯录是一种记录联系人信息的工具&#xff0c;包括姓名、电话号码、电子邮件地址、住址等。 文章的一二三章均于上一篇相同&#xff0c;可以直接看第四章改造内容。 此通讯录是基于通讯录1.0&#xff08;静态版&#xff09;的基础上进行改进&#xff0c;请先看系列文字第…

IPv4网络用户访问IPv6网络服务器

NAT64静态映射为一对一的对应关系&#xff0c;通常应用在IPv4网络主动访问IPv6网络的场景中。 要求位于IPv4网络中的PC通过IPv4地址1.1.1.10能够直接访问位于IPv6网络中Server。 操作步骤 配置FW。 # 配置接口GigabitEthernet 0/0/1的IPv4地址。 <FW> system-view [F…

MyBatis-Plus 分页插件实现分页查询

目录 1. 配置分页查询的拦截器 2. 使用 Page 对象实现分页功能 1. 配置分页查询的拦截器 因为 MyBatis-Plus 里面使用了分页插件来实现分页查询, 所以我们需要将 MyBatis-Plus 的插件添加到当前的项目里, 这样我们执行的查询操作才会生效. 创建 PageConfig 类: Configurat…

华为云hcip核心知识笔记(存储服务规划)

云上存储 &#xff1a; 云硬盘:基于分布式架构&#xff0c;可弹性扩展的虚拟块存储服务 注意事项 挂载云硬盘实例和云硬盘必须在同一区域&#xff0c;否则挂载失败文件存储服务&#xff1a;完全托管的共享文件存储 可以为多个实例实现共享访问&#xff0c;不同vpc中可以进行对…

用python需要下载软件吗,python需要安装哪些软件

大家好&#xff0c;本文将围绕安装python需要什么样的电脑配置展开说明&#xff0c;python需要安装哪些软件是一个很多人都想弄明白的事情&#xff0c;想搞清楚用python需要下载软件吗需要先了解以下几个事情。 编程这东西很神奇。对于那些知道如何有用和有趣的这个工具,对于Xi…

数字IC验证高频面试问题整理附答案(二)

近日后台有同学私信还想要验证的面试题目&#xff0c;这不就来了~ Q16.权重约束中”:”和”: /”的区别 : 操作符表示值范围内的每一个值的权重是相同的,比如[1:3]:40,表示1&#xff0c;2&#xff0c;3取到的概率为40/120&#xff1b; :&#xff0f;操作符表示权重要平均分到…

手把手教你在云环境炼丹(部署Stable Diffusion WebUI)

前几天写了一篇《手把手教你在本机安装Stable Diffusion秋叶整合包》的文章&#xff0c;有些同学反映对硬件的要求太高&#xff0c;显卡太TM贵了。今天我再分享一个云服务器炼丹的方法&#xff0c;方便大家快速入门上手&#xff0c;这个云服务不需要特殊网络设置&#xff0c;能…

【rtmp】2: rtmp 推送 annexb

参考RTMP协议封装H264和H265协议详解 大神分析rtmp推送的大部分是annexb的h264 因此,我们就以此为格式 转为rtmp avcc 推送到服务器端。 一般sps、pps 前面有4个 字节的起始码,所以要跳过,不要计算在sps pps 长度里。 对于视频,先发avc头 第一个 5个字节 第一个字节 0x17 ,…