【链表】-Lc328-基于奇偶节点拆分链表(oddHead,oddTail,evenHead,evenTail)

写在前面

  最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。


目录

  • 写在前面
  • 一、场景描述
  • 二、具体步骤
    • 1.环境说明
    • 2.代码
  • 写在后面


一、场景描述

  给定一个单链表,把所有的 奇数节点 和 偶数节点 分别排在一起。

请注意:这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。
请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(n),n为节点总数。

示例1:输入:1->2->3->4->5->null输出:1->3->5->2->4->null示例2:输入:2->1->3->5->6->4->7->null输出:2->3->6->7->1->5->4->null

二、具体步骤

1.环境说明

名称说明
IntelliJ IDEA2019.2

2.代码

以下为Java版本实现:

public class Lc328_splitListByOddEven {public static void main(String[] args) {ListNode n5 = new ListNode(5);ListNode n4 = new ListNode(4, n5);ListNode n3 = new ListNode(3, n4);ListNode n2 = new ListNode(2, n3);ListNode head = new ListNode(1, n2);ListNode.print(head);System.out.println();ListNode.print(splitListByOddEven(head));}/*** 要求:* O(1),O(n)** 思路:* 用 2 个链表指向 odd和 even,然后同时循环,最后把 even 放在 odd 的 后面** 定义 2 对指针,odd 和 even* oddHead = head, oddTail=head;* evenHead=head.next, evenTail=head.next(tail用于指针的循环)** while循环(每循环一次跳过2个结点),条件是 evenTail != null && evenTail.next != null* oddTail.next = evenTail.next, oddTail = oddTail.next* evenTail.next = oddTail.next, evenTail = evenTail.next** 最后把 偶数 放在 奇数的 放后面,oddTail.next = evenHead** @param head* @return*/private static ListNode splitListByOddEven(ListNode head) {if (head == null) {return null;}if (head.next == null) {return head;}ListNode oddHead = head, oddTail = head;ListNode evenHead = head.next, evenTail = head.next;// 注意这个判断条件while (evenTail != null && evenTail.next != null) {oddTail.next = evenTail.next;oddTail = oddTail.next;evenTail.next = oddTail.next;evenTail = evenTail.next;}oddTail.next = evenHead;return oddHead;}static class ListNode {int val;ListNode next;public ListNode() {}public ListNode(int val) {this.val = val;}public ListNode(int val, ListNode next) {this.val = val;this.next = next;}public static void print(ListNode head) {while (head != null) {if (head.next == null) {System.out.print(head.val);} else {System.out.print(head.val + ", ");}head = head.next;}}}}

写在后面

  如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。

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

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

相关文章

红队打靶练习:INFOSEC PREP: OSCP

目录 信息收集 1、arp 2、nmap WEB 信息收集 wpscan dirsearch ssh登录 提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:69:c7:bf, IPv4: 192.168.110.128 Starting arp-scan 1.10.0 with 256 ho…

地理空间数据科学进阶

目录 写在开头1. 地理编码基础1.1 地理编码的基本原理1.1.1 坐标系统1.1.2 地名解析1.1.3 编码算法1.2 Python中使用地理编码的基础知识1.2.1 百度地图API1.2.2 高德地图API1.2.3 腾讯地图API1.3 Python中实现代码2. 逆地理编码2.1 利用Python进行逆地理编码2.1.1 获取高德地图…

监测Tomcat项目宕机重启脚本(Linux)

1.准备好写好的脚本 #!/bin/sh # 获取tomcat的PID TOMCAT_PID$(ps -ef | grep tomcat | grep -v tomcatMonitor |grep -v grep | awk {print $2}) # tomcat的启动文件位置 START_TOMCAT/mnt/tomcat/bin/startup.sh # 需要监测的一个GET请求地址 MONITOR_URLhttp://localhost:…

java 图书管理系统 spring boot项目

java 图书管理系统ssm框架 spring boot项目 功能有管理员模块:图书管理,读者管理,借阅管理,登录,修改密码 读者端:可查看图书信息,借阅记录,登录,修改密码 技术&#…

Yalmip学习笔记

这里写自定义目录标题 基本用法变量定义关于大MBilevel programming 注:这篇文章主要是留给自己查漏补缺的,所以从来没有使用过yalmip的读者看着会觉得跳来跳去。 基本用法 建模开始前,使用yalmip(clear)清空Yalmip的内部数据库。 下面是一个…

【战报】2023年11月25日PMP考试战报来袭!!

项目管理认证 PMP项目管理课程介绍 PMP成绩查询及电子版证书下载-CSDN博客文章浏览阅读501次,点赞9次,收藏4次。2025.11.25的PMP考试成绩出来了!https://blog.csdn.net/XMWS_IT/article/details/135939596?spm1001.2014.3001.5501 2023年1…

DSP系统时钟总结

一、stm32中断偏移向量介绍 1.1 为什么要设置中断向量偏移 上图可以看出程序上电先进入0x08000000开始运行,紧接着执行复位中断向量,然后执行复位中断程序,然后进入main函数。 如果想要app的中断正常运行,那就必须手动设置中断向…

C语言——深入理解指针3

目录 1. 数组名的理解1. 数组名1.2 数组名理解的特例 2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序4.1 冒泡排序的概念4.2 冒泡排序的优化 5. 二级指针5.1 二级指针的概念5.2 二级指针的运算 6. 指针数组7. 指针数组模拟二维数组 1. 数组名的理解 1. 数组名 在上⼀个…

Python武器库开发-武器库篇之pdf文件暴力破解(五十二)

Python武器库开发-武器库篇之pdf文件暴力破解(五十二) PDF(Portable Document Format,便携式文档格式)是由Adobe公司开发的一种文件格式。PDF文件被广泛用于以可靠方式共享和传输电子文档。它能够保留文档的原始格式,包括字体、图…

公众项目评估方法

本文由群狼调研(社会舆情调查)出品,欢迎转载,请注明出处。公众项目评估方法可以根据项目的性质、规模和目标受众的特点而有所不同。以下是一些常用的公众项目评估方法: 1.调查问卷:设计并实施调查问卷&…

NetCore iText7 根据PDF模板 导出PDF文件

iText 7 是一个用于处理 PDF 文件的流行的开源库,它提供了丰富的功能,包括创建、编辑和处理 PDF 文档。它支持 .NET 平台,因此可以在 .NET Core 中使用该库来处理 PDF 文件。 使用 iText 7,您可以进行以下操作: 1. 创…

[C语言][C++][时间复杂度详解分析]二分查找——杨氏矩阵查找数字详解!!!

一,题目 遇到的一道算法题: 1,已知有一个数字矩阵(row行,col列),矩阵的每行 从左到右 递增,每列 从上到下 递增。 2,现输入一个数字 num ,判断数字矩阵中…

Little云盘测试用例

Little云盘实现了用户的注册、登录,上传文件,下载文件,预览文件(支持视频预览),删除文件,创建文件夹,分享文件链接等功能。管理员可管理用户存储空间、用户信息及文件消息。以下是该…

微信小程序之下拉刷新事件、上拉触底事件和案例

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

趣学Python算法100例-1.1 抓交通肇事犯

1.问题描述 一辆卡车违反交通规则,撞人后逃跑。现场有三人目击该事件,但都没有记住车号,只记下了车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但…

vue核心知识点

一、Vue基础知识点总结 开发vue项目的模式有两种: 基于vue.js,在html中引入vue.js,让vue.js管理div#app元素。基于脚手架环境:通过vue脚手架环境可以方便的创建一个通用的vue项目框架的模板,在此基础之上开发vue项目…

leetcode-top100数组专题下

第一题:48.旋转图像 题目链接 48. 旋转图像 - 力扣(LeetCode) 解题思路 辅助数组 首先我们分析位置关系 matrix_new[j][n - i - 1] matrix[i][j] 如果我们使用一个辅助数组 class Solution:def rotate(self, matrix: List[List[int]…

Python面向对象编程:探索代码的结构之美

文章目录 一、引言二、为什么学习面向对象编程2.1 提高代码的可维护性:通过封装、继承和多态实现模块化设计2.2 提升代码的复用性:通过类和对象的创建实现代码的重用 三、类和对象的基本概念3.1 类和对象的定义和关系:类是对象的模板&#xf…

【劳德巴赫 Trace32 高阶系列 3 -- trace32 svf 文件操作命令】

请阅读【嵌入式开发学习必备专栏 之 Trace32 系列 】 文章目录 Trace32 SVF 文件操作命令JTAG.PROGRAM.autoJTAG.PROGRAM.SVF命令参数介绍IRPREIRPOSTDRPREDRPOSTInitStateIgnoreTDOVerbose使用示例Trace32 SVF 文件操作命令 JTAG.PROGRAM.auto Format: JTAG.PROGRAM.</

elk之安装和简单配置

写在前面 本文看下elk的安装和简单配置&#xff0c;安装我们会尝试通过不同的方式来完成&#xff0c;也会介绍如何使用docker&#xff0c;docker-compose安装。 1&#xff1a;安装es 1.1&#xff1a;安装单实例 下载es安装包 在这里 下载&#xff0c;下载后解压到某个目录…