Leetcode之重排链表

article/2025/5/22 1:30:26

文章目录

  • 前言
  • 一、线性表
  • 二、寻找链表中点 + 链表逆序 + 合并链表
  • 总结


前言

题目如下:
在这里插入图片描述重排链表(点我)

一、线性表

因为链表不能下标访问元素,所以我们不能随机访问链表中的元素,因此我们采用数组来存储链表中的每一个元素。利用线性表可以随机访问元素的特点,可以轻松解决该题目。
具体代码如下:

void reorderList(struct ListNode* head) {if (head == NULL) {return;}struct ListNode* vec[40001];struct ListNode* node = head;int n = 0;while (node != NULL)//遍历将链表每个节点存储于数组vec中 {vec[n++] = node;node = node->next;}int i = 0, j = n - 1;while (i < j)//按照题目所述下标访问规律进行链接{vec[i]->next = vec[j];i++;if (i == j)//当i==j时退出循环{break;}vec[j]->next = vec[i];j--;}vec[i]->next = NULL;
}
代码来源:leetcode官方题解

空间复杂度0(n) 时间复杂度0(1)
这种方法还是非常好想的

二、寻找链表中点 + 链表逆序 + 合并链表

想进一步优化,必须要熟悉快慢指针找中间节点,链表逆序等,下面有这些题目的链接供大家参考:
链表的中间节点
反转链表
具体步骤:
1.找到原链表的中间节点
2. 将中间节点的后半部分反转
3. 按循序将二个链表交叉链接
过程如动图:
在这里插入图片描述具体代码如下:

struct ListNode* getMid(struct ListNode* head)//获取中间节点
{struct ListNode* slow = head;struct ListNode* fast = head;while (fast && fast->next){fast = fast->next->next;slow = slow->next;}return slow;
}
struct ListNode* Swap(struct ListNode* head)//逆序
{struct ListNode* prev = NULL;struct ListNode* cur = head;struct ListNode* next = head->next;while (cur){cur->next = prev;prev = cur;cur = next;if (next != NULL){next = next->next;}}return prev;
}
void reorderList(struct ListNode* head) {if (head == NULL){return;}if(head->next==NULL){return;}struct ListNode* mid = getMid(head);struct ListNode* cur = head;struct ListNode* prev = head;while (cur != mid){prev = cur;cur = cur->next;}prev->next = NULL;struct ListNode* p2 = Swap(mid);struct ListNode* p1 = head;struct ListNode* next1 = p1;struct ListNode* next2 = p2;cur = head;int n = 1;while (next1 != NULL){if (n % 2 != 0){next1 = cur->next;cur->next = next2;cur = cur->next;}else{next2 = cur->next;cur->next = next1;cur = cur->next;}n++;}
}

总结

以上就是重组链表的全部内容希望对大家有帮助!


http://chatgpt.dhexx.cn/article/Tf8ZD1H6.shtml

相关文章

推荐算法架构4:重排

系列文章,请多关注 推荐算法架构1:召回 推荐算法架构2:粗排 推荐算法架构3:精排 推荐算法架构4:重排 1 总体架构 重排主要解决三大问题:用户体验

Cadence Orcad元器件位号重排与原理图页序号重排

一.为什么需要元器件位号重排 在画原理图的过程中&#xff0c;增删改的操作是很多的&#xff0c;这使得元器件位号是通常是混乱的。在绘制完成后&#xff0c;通常需要重排一下位号&#xff0c;这样同一功能块的元器件位号是相邻的&#xff0c;这使得画PCB时能比较方便的确定某一…

你真的了解重排和重绘吗?

做过前端开发的小伙伴就算不是非常理解重排与重绘&#xff0c;但是肯定都听过这两个词。那为什么这两个东西这么重要&#xff1f;因为他与我们的页面性能息息相关&#xff0c;今天&#xff0c;我们就来好好研究一下这两个东西。 浏览器的渲染流程 在讲解重排和重绘之前&#…

简单易懂之什么是重排和重绘?

文章目录 目录 一、浏览器页面是怎么生成的&#xff1f; 二、什么是重排和重绘&#xff1f; 1.什么时候发生重绘&#xff1f; 2.如何优化重排效率&#xff1f; 一、浏览器页面是怎么生成的&#xff1f; 首先让我们来先了解一下浏览器页面生成的过程 文字解析&#xff1a; 1&am…

重排(回流)和重绘

什么是重排和重绘 浏览器下载完页面所有的资源后&#xff0c;就要开始构建DOM树&#xff0c;与此同时还会构建渲染树(Render Tree)。&#xff08;其实在构建渲染树之前&#xff0c;和DOM树同期会构建Style Tree。DOM树与Style Tree合并为渲染树&#xff09; 浏览器下载完成所有…

什么是重排和重绘

简答 1.重排&#xff08;重新排列&#xff09;> 指元素的位置发生改变的时候浏览器会进行重排 2.重绘&#xff08;重新绘制&#xff09;>指元素的基本样式发生改变是发生重绘&#xff0c;比如颜色等。。。 细答 前提概要&#xff08;浏览器使用两个引擎进行工作一是渲…

Docker之发布自己的镜像

首先应当是先登入 其次是将镜像重新打包 在此处使用命令 docker commit fb6af4e48c14 zlx/centos7_vim:1.0 将一个容器生成一个新的镜像 然后把这个镜像改成dockerhub的仓库名&#xff0c;push一下就行了&#xff0c;dockerhub毕竟是国外的网站&#xff0c;换成阿里云就好了

Matlab调用excel数据绘制折线图

如题&#xff0c;matlab之前没接触过&#xff0c;但是电脑上一直有安装&#xff0c;有些老师需要做几张图放论文里&#xff0c;所以尝试了一下&#xff08;excel其实效果也行&#xff0c;但matlab感觉更专业&#xff09; x2:2:778;%x轴上的数据&#xff0c;第一个值代表数据开…

COGS 2075. [ZLXOI2015][异次元圣战III]ZLX的陨落

★★☆ 输入文件&#xff1a;ThefallingofZLX.in 输出文件&#xff1a;ThefallingofZLX.out 简单对比时间限制&#xff1a;1 s 内存限制&#xff1a;256 MB 【题目描述】 正当革命如火如荼&#xff0c;情侣教会日薄西山之时&#xff0c;SOX和FFF的分歧却越来越大&#…

Codechef GRAPHCNT 支配树学习及tarjan算法求解

[Codechef GRAPHCNT]新年的有向图 【题目描述】 zlx同学在学习数论时,被虐了一脸,丧心病狂的他决定去报复社会。 zlx在公园里埋下N颗地雷,用来炸飞在春节期间秀恩爱的情侣。这N颗地雷由M条有向边连接成为一个有向图,zlx则在1号地雷处引爆1号地雷可以到达的地雷。现在,为了…

大数据体系建设经验分享

分享嘉宾&#xff1a;吴荣彬 分贝通 大数据部负责人 编辑整理&#xff1a;zlx 出品平台&#xff1a;DataFunTalk 导读&#xff1a;本文将介绍分贝通在大数据领域的一些建设经验。分贝通在ToB领域是一个年轻的公司&#xff0c;成立六年多&#xff0c;大数据体系刚刚建立一年多&a…

将二维数组转为稀疏数组进行压缩,提高效率

** 稀疏数组 ** ##基本介绍&#xff1a; 当一个数组中大部分元素为&#xff10;&#xff0c;或者为同一个值的数组时&#xff0c;可以使用稀疏数组来保存该数组。 稀疏数组的处理方法是: 1) 记录数组一共有几行几列&#xff0c;有多少个不同的值 2) 把具有不同值的元素的行列…

A数字三角 怨种

问题描述 有一天&#xff0c;无聊的 zlx 从 1 开始数数&#xff0c;同时在纸上写下每个数的个位数字。因为她非常热爱直角三角形&#xff0c;所以在纸上写下的数字按照直角三角形排列。现在告 诉你写她了 N 行数字&#xff0c;要求你打出这些数字。 输入格式 一行一个数 N&a…

聊聊Spring的IOC,AOP、DI、MVC

1 聊聊Ioc,Di,Mvc,Aop 不想看下面内容的&#xff0c;直接上代码连接&#xff0c;以下代码都有注释 传送门 1.1 看启动项 我们先来看看启动项 package com.tian;import com.tian.springframework.annotation.SpringBootApplication; import com.tian.springframework.config…

ZYNQ DDS产生载波FFT变换

环境&#xff1a;vivado2017.4&#xff0c;快速傅里叶变换V9.0 IP核 一&#xff0c;介绍&#xff1a;Xilinx FFT IP核是一种计算DFT的有效方式。 特点&#xff1a;前向变换&#xff08;FFT&#xff09;和反向变换&#xff08;IFFT&#xff09;在复数空间&#xff0c;并且可…

并发队列中迭代器弱一致性原理探究

一、前言 并发队列里面的Iterators是弱一致性的&#xff0c;next返回的是队列某一个时间点或者创建迭代器时候的状态的反映。当创建迭代器后&#xff0c;其他线程删除了该元素时候并不会抛出java.util.ConcurrentModificationException异常&#xff0c;能够保持创建迭代器后的元…

浅谈同构类问题的骗分算法

ZLX算法-----同构类问题的有力骗分算法前言&#xff1a;ZLX算法是一种解决判定性同构问题的蒙特卡罗式骗分算法&#xff1a;总能在确定的运行时间内出解&#xff0c;但是得到的解不能保证正确。尽管由于具有拓扑序&#xff0c;树同构和仙人掌同构存在多项式算法&#xff0c;但是…

win10下修改C盘用户文件夹名

之前安装一个程序出错&#xff0c;上网百度后是用户文件夹名为中文&#xff0c;也在网上找了好多方法&#xff0c;有同步的&#xff0c;有修改注册表的&#xff0c;最后我找到一个比较简单而且数据保留完整的方法。这种方法也会自动修改用户的环境变量&#xff0c;不过修改完后…

【Windows】Win10-更改c盘下的用户文件夹名

转载ooooohugh的文章&#xff0c;原文地址&#xff1a;https://blog.csdn.net/qq_33530388/article/details/71739845 当初 不小心用自己名字 作为计算机用户名&#xff0c;后来 许多软件因为 不支持 路径中有中文&#xff0c;导致吃了不少的亏&#xff0c;心疼。。。。 下面说…

Windows10更改c盘中用户名对应的文件名字

目录 前言一、修改步骤1.开启管理员账号并登陆2.重启电脑3.登录管理员账号4.重命名用户名对应的文件夹5.修改Path6.重启电脑并切换回你的账号7.修改环境变量8.重启电脑 二、修改导致的问题1.桌面大部分软件快捷方式失效2.部分软件无故消失 三、提醒Last 前言 强烈建议看完此文…