leetcode328. 奇偶链表

news2025/3/11 3:27:48

给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。
第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。
请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。

你必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。

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

提示:
n == 链表中的节点数
0 <= n <= 104
-106 <= Node.val <= 106

思路:
1、用两个奇偶指针分别指向奇偶节点的起始位置,另外需要一个单独的指针evenHead来保存偶节点的起点位置。
2、然后把奇节点的指向偶节点的下一个(一定是奇节点),再把偶节点指向下一个奇节点的下一个(一定是偶节点),以此类推直至末尾。
3、时把分开的偶节点的链表连在奇节点的链表后即可。

#include <iostream>
#include <algorithm>
using namespace std;
struct ListNode {
	int val;
	ListNode* next;
	ListNode() : val(0), next(nullptr) {}
	ListNode(int x) : val(x), next(nullptr) {}
	ListNode(int x, ListNode* next) : val(x), next(next) {}
};
ListNode* oddEvenList(ListNode* head) {
	if (head == nullptr)
		return head;//访问head->next先判断其是否为nullptr
	ListNode* odd = head;//奇序节点
	ListNode* even = head->next;//偶序节点
	ListNode* evenHead = head->next;//偶序节点的头节点 避免断链后重新找
	while (odd->next != nullptr && even->next != nullptr)//停止条件
	{
		odd->next = odd->next->next;//奇序节点的下个节点
		even->next = even->next->next;//偶序节点的下个节点
		odd = odd->next;//奇序节点后移
		even = even->next;//偶序节点后移
	}
	odd->next = evenHead;//奇序节点的最后一个节点连接到偶序节点的第一个节点
	return head;//返回链表头
}
int main() {
	ListNode node1, node2, node3, node4, node5;
	node1.val = 1;
	node1.next = &node2;
	node2.val = 2;
	node2.next = &node3;
	node3.val = 3;
	node3.next = &node4;
	node4.val = 4;
	node4.next = &node5;
	node5.val = 5;
	node5.next = nullptr;
	ListNode* res = oddEvenList(&node1);
	while (res != nullptr)
	{
		cout << res->val << " ";
		res = res->next;
	}
	cout << endl;
	return 0;
}

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

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

相关文章

CentOS 7安装GitLab、创建用户、创建Repo、拉取推送

效果图 前言 gitlab全球出名&#xff0c;包含免费的社区版CE、收费的企业版EE&#xff0c;在国内安装速度一般&#xff1b; gitlab极狐版是中国特供版&#xff0c;用起来就跟CE一样&#xff0c;推荐国内使用~ 实现步骤 - 安装&配置 先准备好gitlab服务对外的访问地址&am…

技术分享 | MySQL级联复制下进行大表的字段扩容

作者&#xff1a;雷文霆 爱可生华东交付服务部 DBA 成员&#xff0c;主要负责Mysql故障处理及相关技术支持。爱好看书&#xff0c;电影。座右铭&#xff0c;每一个不曾起舞的日子&#xff0c;都是对生命的辜负。 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;…

使用Vite工具构建OpenLayers应用

vite作为最近大火的前端构建工具,吸引了大批开发者和工具框架作者的关注。vite自称为下一代的构建工具,这是要取代webpack的节奏啊。openlayers最新版本的案例代码就使用了vite来构建,因此这一篇文章我们来给大家示范一下如何使用vite来构建一个基于openlayers的应用。 首先…

从「搭子」文化,看融云如何助力垂类社交应用增长

互联网人拜佛 be like &#x1f446;&#xff0c;主打的就是一个垂直和精准。关注【融云全球互联网通信云】了解更多 其实&#xff0c;这也是年轻人的交友现状。最近随着大学生“特种兵式”旅游出圈的“搭子”友情&#xff0c;就是这样。 “搭子”&#xff0c;AKA 垂直细分领…

怎么把图片拼接成长图,3招教你快速处理

怎么把图片拼接成长图的方法&#xff0c;有没有快速便捷可一键操作的呢&#xff1f;当我们把图片拼接成长图有很多优点&#xff0c;比如说我们在图片文件传输的时候就更加快捷方便&#xff0c;还有就是我们在图片展示的时候更加统一。虽然有这么多优点&#xff0c;但是如果我们…

【RobotFramework自动化测试】

robotframework介绍 RF是一个基于Python语言开发的&#xff0c;可扩展的&#xff0c;是以关键字驱动模式的自动化测试框架。RF最新的版本是2019 年7月份发布&#xff0c;7月份之前只支持python2.7&#xff0c;7月之后支持3.X的版本 robotframework的安装 安装python环境&…

【JUC】CAS

【JUC】CAS 文章目录 【JUC】CAS1. 概述2. Unsafe类 1. 概述 在Java并发编程中&#xff0c;CAS是一种非阻塞的算法&#xff0c;即Compare and Swap&#xff08;比较并交换&#xff09;。 CAS通过比较内存中某个位置的值和预期值&#xff0c;如果相同&#xff0c;则将该位置的…

springcloud各个组件搭配使用演示

springcloud各个组件使用demo Eureka服务注册中心 创建三个eureka服务注册中心,分别为: eureka-server1 spring:application:name: eureka-server1 server:port: 8001eureka:client:service-url:defaultZone: http://localhost:8002/eureka/,http://localhost:8003/eureka/…

EtherCAT和Ethernet的不同点有哪些, 通信周期又是什么意思?

小伙伴们&#xff0c;我们又来了。上期大概介绍了EtherCAT的一些特性&#xff0c;本期我们将会更详细的介绍一下EtherCAT的实现方式&#xff0c;通信周期的意义到底是什么、SDO和PDO到底是什么等概念。 首先要声明&#xff0c;尽管本期介绍略微深入&#xff0c;实际上小伙伴使…

超详细!腾讯NLP算法岗面经(已offer)

作者 | ZipZou 整理 | NewBeeNLP 面试锦囊之面经分享系列&#xff0c;持续更新中 可以后台回复"面试"加入交流讨论组噢 分享一篇旧文&#xff0c;希望大家都成功上岸~ 写在前面 首先来段简单的自我介绍&#xff1a;2021届硕士&#xff0c;硕士期间未有实习经历&…

【Micropython】ESP8266通过NTP同步本地RTC时间

【Micropython】ESP8266通过NTP同步本地RTC时间 &#x1f4cc;相关篇《【MicroPython esp8266】固件烧写教程》✨本案例基于Thonny平台开发。✨ &#x1f4cb;实时时钟 (RTC) &#x1f516;RTC属于machine模块中的子类。 datetime([value]): 获取或设置当前时间。如果没有指定…

GitLab合并操作自动构建Jenkins任务

最终实现当git库 有合并操作自动构建jenkins的指定任务 1、安装Build Authorization Token Root插件 Build Authorization Token Root&#xff1a;使用拥有读取权限的匿名用户访问&#xff0c;配置钩子链接时需要用到,如果不使用&#xff0c;每次访问链接都需要提供认证&#…

Rancher 部署带有密码认证 Elasticsearch 服务

Rancher 部署带有密码认证 Elasticsearch 服务 1. 工作负载部署 镜像地址 elasticsearch:7.6.2端口映射 NodePort 9200 -> 31627(随机)环境变量 node.namees1 network.host0.0.0.0 discovery.typesingle-node配置映射 新建配置映射&#xff0c;内容如下&#xff1a; xpack.…

Python VTK 绘制线条

前言&#xff1a; Python-VTK绘制线条&#xff0c;主要绘制直线和曲线 主要函数介绍&#xff1a; vtk.vtkPoints() 在VTK中用于定义点的类&#xff0c;使用points.InsertPoint(index, x, y, z) 即可插入点集。函数中&#xff0c;第一个参数是点的序号&#xff0c;后面是三个参…

垃圾回收面试总结

堆空间的基本结构 Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时&#xff0c;Java 自动内存管理最核心的功能是 堆 内存中对象的分配与回收。 Java 堆是垃圾收集器管理的主要区域&#xff0c;因此也被称作 GC 堆&#xff08;Garbage Collected Heap&am…

含可再生能源的配电网最佳空调负荷优化控制

目录 1 主要内容 2 部分代码 3 程序结果 4 程序链接 1 主要内容 该程序完美复现《Optimal air-conditioning load control in distribution network with intermittent renewables》&#xff0c;中文题目&#xff08;翻译&#xff09;为《含可再生能源的配电网最佳空调负荷…

如何快速用本地文件建立一个Url资源定位符

今天有一个需求&#xff0c;用easyExcel从服务端的一个Url来获取excel做处理。 搜了很多方案&#xff0c;首先要解决的一个问题就是&#xff0c;我得从一个Url获取一个excel&#xff0c;那就意味着我要上传一个文件到我的服务器上&#xff0c;把文件传递上去&#xff0c;然后访…

《API加速优化方案:多级缓存设计》

点击上方蓝字关注我们&#xff01; 这事情还得从两天前说起...话说迭代上了个接口&#xff0c;该接口横跨多个应用服务&#xff0c;链路如下图所示&#xff1a; 问题来了&#xff1a;通过skywalking&#xff0c;我们的监控到dev环境的该接口偶尔请求耗时很长&#xff0c;且抛异…

震撼开源!首个1万多人共同标注的35种语言的高质量对话数据集来啦

文 | 小戏 “数据”&#xff01;“数据”&#xff01;“数据”&#xff01; 大模型时代&#xff0c;最珍贵的是什么&#xff1f;是 Transformer 的架构吗&#xff1f;是 RLHF 的方法吗&#xff1f; 不是&#xff01;是数据&#xff0c;是高质量的数据&#xff0c;是高质量且开源…

科幻AI生活来临,博联版“贾维斯”让全屋智能触手可及

1 ChatGPT提升交互体验 解决人机语音交互痛点 据洛图科技(RUNTO)《中国智能音箱零售市场月度追踪》报告&#xff0c;2022年中国智能音箱市场销量为2631万台&#xff0c;市场销额达到75.3亿元。当前智能音箱已完成初轮用户普及&#xff0c;舒适的居家定制服务走入千家万户&…