当前位置: 首页 > news >正文

【Leetcode——重排链表】

一、重排链表

在这里插入图片描述
对于这道题,有两种思路:

思路1.

1.使用一个线性表,存储链表中的每个节点,然后按照题目的条件,来链接线性表的各个节点即可。

在这里插入图片描述
使用左下标和右下标来定位线性表中的节点。

1.先存储链表中的节点数据到线性表

void reorderList(struct ListNode* head)
{struct ListNode* tmp[100000];int tail = 0;struct ListNode*cur = head;1.把链表中的节点存储到线性表中while(cur){tmp[tail++] = cur;cur = cur->next;}int front = 0;//由于下标从0开始,故需要--tailtail--;while(front<tail){tmp[front++]->next = tmp[tail];tmp[tail--]->next = tmp[front];}//到这一步必须置空,否则出现自己的next指向自己,出现环状//并且需要是front的next置空,因为在循环中tail和front已经错过了。tmp[front]->next = NULL;return head;
}

2.循环条件是front < tail

时间复杂度为O(N),空间复杂度为O(N)

思路2.

(1)找到链表的中间节点
(2)将链表中间节点开始之后的链表逆置
(3)将两个链表重新合并

(1)找链表的中间节点可以使用快慢指针来求出。
快指针一次走两步,慢指针一次走一步。
在这里插入图片描述

(2)链表逆置,有两种方法,一种方法是使用三指针,一种方法是使用头插。

三指针法:

在这里插入图片描述

(3)合并两个链表,合并链表,从两个链表的头节点开始链接。
在这里插入图片描述

struct ListNode *middleNode(struct ListNode*head)
{struct ListNode*fast = head,*slow = head;while(fast && fast->next){fast = fast->next->next;slow = slow->next;}return slow;
}struct ListNode* reverseList(struct ListNode*head)
{struct ListNode*prev = NULL;struct ListNode*cur = head;while(cur){struct ListNode*next = cur->next;cur->next = prev;prev = cur;cur = next;}return prev;
}void mergeList(struct ListNode*head,struct ListNode*head2)
{struct ListNode*l2 = head2,*l1 = head;while(l1 && l2){struct ListNode*l1next = l1->next;struct ListNode*l2next = l2->next;l1->next = l2;l1 = l1next;l2->next = l1;l2 = l2next;}
}
void reorderList(struct ListNode* head)
{if (head == NULL || head->next == NULL){return;}//1.找中间节点struct ListNode *midnode = middleNode(head);//2.逆置中间节点之后的链表//3.按照题目合并链表struct ListNode*head2 = midnode->next;midnode->next = NULL;//把它置空,其实是把midnode纳入第一条链表中的最后一个节点了//对后半链表逆置head2 = reverseList(head2);mergeList(head,head2);   }

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

总结

两种方法各有好处,法1空间复杂度大,但是易于理解。
法2相对更难理解,但是空间复杂度小。

相关文章:

【Leetcode——重排链表】

文章目录一、重排链表思路1.思路2.总结一、重排链表 对于这道题&#xff0c;有两种思路&#xff1a; 思路1. 1.使用一个线性表&#xff0c;存储链表中的每个节点&#xff0c;然后按照题目的条件&#xff0c;来链接线性表的各个节点即可。 使用左下标和右下标来定位线性表中的…...

HCIP总结(一)

抽象语言---编码---二进制---电信号----处理电信号 &#xff08;电脑工作流程&#xff09; OSI参考模型 ----OSI/RM (核心思想&#xff1a;分层) 应用层----提供各种应用服务&#xff0c;将抽象语言转换成编码&#xff0c;提供人机交互的接口 表示层----将编码转换成二进制 …...

华为OD机试真题Python实现【黑板上色】真题+解题思路+代码(20222023)

题目 疫情过后希望小学终于又重新开学了,3 年 2 班开学第一天的任务是将后面的黑板报重新制作, 黑板上已经写上了N个正整数,同学们需要给这每个数分别上一种颜色, 为了让黑板报既美观又有学习意义,老师要求同种颜色的所有数都可以被这个颜色中最小的那个数整除, 现在帮小…...

C++中的利器——模板

前文本文主要是讲解一下C中的利器——模板&#xff0c;相信铁子们在学完这一节后&#xff0c;写代码会更加的得心应手&#xff0c;更加的顺畅。一&#xff0c;泛型编程想要学习模板&#xff0c;我们要先了解为什么需要模板&#xff0c;我们可以看看下面这个程序。int add(int&a…...

k8s控制器

目录 一、控制器简介 二、控制器类型 1、RC和RS 2、Deployment 3、DaemonSet 4、Job 5、CronJob 6、StateFulSet 7、HPA 一、控制器简介 在kubernetes中&#xff0c;按照Pod的创建方式可以将其分为两类&#xff1a; 自主式:kubernetes直接创建出来的Pod&#xff0c;…...

嵌入式学习笔记——认识STM32的 GPIO口

寄存器开发STM32GPIO口前言认识GPIOGPIO是什么GPIO有什么用GPIO怎么用STM32上GPIO的命名以及数量GPIO口的框图&#xff08;重点&#xff09;输入框图解析三种输入模式GPIO输入时内部器件及其作用1.保护二极管2.上下拉电阻&#xff08;可配置&#xff09;3.施密特触发器4.输入数…...

类和对象(中)

文章目录 继承的概念继承的语法父类成员访问super关键字子类构造方法super和this初始化protected关键字继承方式final关键字继承与组合一、继承的概念 继承(inheritance)机制&#xff1a;是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类…...

Java——单词接龙

题目链接 leetcode在线oj题——单词接龙 题目描述 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> … -> sk&#xff1a; 每一对相邻的单词只差一个字母。 对于 1 < i < k 时&#xff…...

HTML DOM 事件监听器

通过JavaScript&#xff0c;我们可以给页面的某些元素添加事件的监听器&#xff0c;当元素触发相应事件的时候监听器就会捕捉到这个事件并执行相应的代码。addEventListener() 方法实例当用户点击按钮时触发监听事件&#xff1a;document.getElementById("myBtn").ad…...

java基本数据类型取值范围

在JAVA中一共有八种基本数据类型&#xff0c;他们分别是 byte、short、int、long、float、double、char、boolean 整型 其中byte、short、int、long都是表示整数的&#xff0c;只不过他们的取值范围不一样 byte的取值范围为-128~127&#xff0c;占用1个字节&#xff08;-2的…...

maven的安装配置

目录 1. Maven的安装配置 1.1检测jdk的版本 1.2下载maven 1.3配置maven环境变量 2.认识maven的目录结构 2.1 创建一个文件夹作为项目的根目录 1.创建如下结构的目录 2. 在pom.xml文件中写入如下内容(不用记忆) 3.在mian-->java--》下边创建java文件​编辑 4.cmd下…...

【转载】System Verilog 上下文context的含义以及设置导入函数的作用域

放丢失&#xff0c;转载一下&#xff0c;原文&#xff1a;https://blog.csdn.net/qq_31348733/article/details/1010546251. 上下文(context)的含义导入函数的上下文是该函数定义所在的位置&#xff0c;比如$unit 、模块、program或者package作用域(scope)&#xff0c;这一点跟…...

redis数据类型

Redis 数据类型 redis无论什么数据类型&#xff0c;在数据库中都是以key-value形式保存&#xff0c;并且所有的key(键)都是字符串&#xff0c;所以讨论基础数据结构都是讨论的value值的数据类型 1. 字符串操作 set key value [ex seconds] [px milliseconds] [nx|xx] 设置ke…...

【独家】华为OD机试 - 最多获得的短信条数(C 语言解题)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...

【剧前爆米花--爪哇岛寻宝】包装类的装拆箱和泛型的擦除机制

作者&#xff1a;困了电视剧 专栏&#xff1a;《数据结构--Java》 文章分布&#xff1a;这是关于数据结构的基础之一泛型的文章&#xff0c;希望对你有所帮助。 目录 包装类 装箱 装箱源码小细节 拆箱 泛型 什么是泛型 泛型编译的擦除机制 不能实例化泛型类型数组 包装…...

BufferQueue研究

我们在工作的过程中&#xff0c;肯定听过分析卡顿或者冻屏问题的时候&#xff0c;定位到APP卡在dequeueBuffer方法里面&#xff0c;或者也听身边的同事老说3Buffer等信息。所以3Buffer是什么鬼&#xff1f;什么是BufferQueue?搞Android&#xff0c;你一定知道Graphic Buffer和…...

【计组笔记08】计算机组成与原理之IO设备系统(输入、输出设备、外存储器)

这篇文章,主要介绍计算机组成与原理之IO设备系统(输入、输出设备、外存储器)。 目录 一、IO设备系统 1.1、IO系统的演变 (1)早期阶段 (2)接口模块和DMA阶段...

使用Vue实现数据可视化大屏功能(一)

导语   现在在很多的工程项目中&#xff0c;都有有关于数据大屏相关的监控内容&#xff0c;这里我们就来看一下如何用Vue来搭建一个数据可视化大屏应用。 创建项目 使用WebStorm工具创建一个Vue的项目。如下图所示&#xff0c;配置好vue的脚手架工具和nodejs的运行环境&#…...

华为OD机试真题Python实现【整数对最小和】真题+解题思路+代码(20222023)

整数对最小和 题目 给定两个整数数组 array1 array2 数组元素按升序排列 假设从array1 array2中分别取出一个元素可构成一对元素 现在需要取出K个元素 并对取出的所有元素求和 计算和的最小值 注意: 两对元素如果对应于array1 array2中的两个下标均相同,则视为同一个元素 �…...

2023年绿色建筑国际会议(ICoGB 2023)

2023年绿色建筑国际会议&#xff08;ICoGB 2023&#xff09; 重要信息 会议网址&#xff1a;www.icogb.org 会议时间&#xff1a;2023年5月19-21日 召开地点&#xff1a;斯德哥尔摩 截稿时间&#xff1a;2023年4月1日 录用通知&#xff1a;投稿后2周内 收录检索&#xff…...

银河麒麟服务器系统4.02-sp2实战:飞腾架构下的虚拟机优化与远程管理

1. 银河麒麟服务器系统与飞腾架构概述 银河麒麟服务器系统4.02-sp2是国内自主研发的企业级操作系统&#xff0c;特别针对飞腾处理器架构进行了深度优化。飞腾作为国产CPU的代表之一&#xff0c;采用ARMv8指令集&#xff0c;在政务、金融等关键领域广泛应用。这套组合最大的特点…...

OpenClaw技能开发入门:为百川2-13B量化模型定制自动化模块

OpenClaw技能开发入门&#xff1a;为百川2-13B量化模型定制自动化模块 1. 为什么选择OpenClaw开发技能&#xff1f; 去年冬天&#xff0c;我为了给团队搭建一个内部天气查询助手&#xff0c;尝试过至少三种不同的自动化方案。要么是API调用太复杂&#xff0c;要么是自然语言处…...

win11 WSL ubuntu24.04 安装两个、重命名

导出&#xff1a; wsl --export Ubuntu-24.04 D:\Ubuntu-24.04.tar导入新镜像&#xff1a; wsl --import Ubuntu-24.04-2 D:\Ubuntu-24.04-2\Ubuntu-24.04-2 D:\Ubuntu-24.04.tar...

BlueROV2进阶:巧用ArduSub参数配置实现多舵机协同控制

1. 从单舵机到多舵机协同的跨越 第一次用Pixhawk控制单个舵机转动时的兴奋感还记忆犹新&#xff0c;但当真正开始构建BlueROV2这样的水下机器人时&#xff0c;你会发现单一舵机控制远远不够。想象一下这样的场景&#xff1a;机械爪需要精准开合&#xff0c;云台要平稳转动&…...

全基因组序列比对工具mVISTA的保姆级使用指南:从文件准备到结果解读

全基因组序列比对工具mVISTA的保姆级使用指南&#xff1a;从文件准备到结果解读 在基因组学研究领域&#xff0c;序列比对是揭示物种间进化关系、识别保守区域和功能元件的基础操作。mVISTA作为一款专门用于全基因组序列比对的在线工具&#xff0c;凭借其直观的可视化界面和强…...

LeagueAkari终极指南:智能游戏辅助工具快速上手与深度配置

LeagueAkari终极指南&#xff1a;智能游戏辅助工具快速上手与深度配置 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾在…...

别再傻傻分不清了!用Simulink手把手带你搞懂导纳控制与阻抗控制的本质区别

导纳控制 vs 阻抗控制&#xff1a;从理论到Simulink实战的深度解析 在机器人控制领域&#xff0c;柔性交互是一个永恒的话题。想象一下&#xff0c;当机械臂需要完成精密装配任务时&#xff0c;既要有足够的刚性保证定位精度&#xff0c;又要在意外碰撞时表现出适当的柔顺性——…...

英雄联盟智能助手:5个核心功能彻底改变你的游戏体验

英雄联盟智能助手&#xff1a;5个核心功能彻底改变你的游戏体验 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为繁琐的游戏…...

突破信息获取壁垒:智能内容解锁工具使用指南

突破信息获取壁垒&#xff1a;智能内容解锁工具使用指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 你是否曾遇到这样的情况&#xff1a;一篇专业的技术文章、一份重要的研究报告…...

5大核心功能重塑Sketch效率:RenameIt批量命名工具的流程优化实践

5大核心功能重塑Sketch效率&#xff1a;RenameIt批量命名工具的流程优化实践 【免费下载链接】RenameIt Keep your Sketch files organized, batch rename layers and artboards. 项目地址: https://gitcode.com/gh_mirrors/re/RenameIt 在现代UI/UX设计工作流中&#x…...