【Day5】力扣第328题,奇偶链表

news2024/12/23 18:20:10

前言:
大家好,我是良辰丫🚀🚀🚀,今天带大家刷一个力扣链表题,有人可能会说,一道题够嘛,刚开始刷题别着急,毕竟,心急吃不了热豆腐,🍾🍾🍾我们慢慢来,先积累思想,脑子里的东西多了,敲代码敲得多了,有一天,你会发现你也可以做到“下笔如有神”,废话不多说,我们来看一下这道题,我把题目链接放到了下边,大家可以去做一下。💖💖💖
题目链接: 力扣第328题,奇偶链表

🧑个人主页:良辰针不戳
📖所属专栏:EveryDay学java
🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
💦期待大家三连,关注,点赞,收藏。
📜作者能力有限,也会出错,希望大家可以指正。
💞愿与君为伴,共探Java汪洋大海。


目录

  • 1、题目介绍
  • 2、题目分析


1、题目介绍

题目:

  • 给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。
  • 第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。
  • 请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。
  • 你必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。

在这里插入图片描述

输入: head = [1,2,3,4,5]
输出: [1,3,5,2,4]

在这里插入图片描述

输入: head = [2,1,3,5,6,4,7]
输出: [2,3,6,7,1,5,4]

提示:

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

2、题目分析

做题的第一步是什么呢?有人说思路分析,你连题目都没看懂,笔试的时候做编程题,题目都没读懂或者懵懵懂懂的读错了题,分析了半天,写了不着边际的代码,时间浪费了那么多,从头再来?时间不等人呀!就因为不细心,本来可以做出来的题目没有做出来,这家公司与你无缘了,哈哈,还是注重细节。

我做这道题就看错了,人家写的是奇数的节点和偶数节点,而我看成了数值val为奇数和偶数,一顿操作猛如虎,结果答案不对,脑瓜里充满了问号,捉摸了半天,代码没毛病呀,然后答案进行对比,才发现了错误,因此呢,大家一定要看清题,而且把题目的例子多看几遍,这样有助于消化题目。

题目分析:

  • 奇数节点放左边,偶数节点放右边,遇到这种分段题,咱们首先要培养的就是分段思路,分成两个节点段,奇数段和偶数段,通过遍历找到奇数节点和偶数节点进行拼接。
  • 那么,如何进行拼接呢?我们要有双指针思想,前段和后段分别有首尾指针。下面我将通过注释的方式详细解析代码,希望能给大家带来帮助。
class Solution {
    public ListNode oddEvenList(ListNode head) {
    //没有节点或者只有一个节点,直接返回头结点
    //0个或1个就没有操作的必要了
        if(head == null || head.next == null){
            return head;
        }
        //s:start
        //e:end
        //bs:前段首指针
        //be:前段尾指针
        //as:后段首指针
        //ae:后段尾指针
        ListNode bs = null;
        ListNode be = null;
        ListNode as = null;
        ListNode ae = null;
        //通过cur进行遍历
        ListNode cur = head;
        //通过计数器记录第几个节点
        int count = 1;
        while(cur != null){
        //奇数节点放在前一段
            if(count % 2 == 1){
            //前段节点第一次插入时首尾指针都需要移动
                if(bs == null){
                    bs = cur;
                    be = cur;
             //不是第一次插入时只需要移动尾节点
                } else {
                    be.next = cur;
                    be = be.next;
                }
          //偶数节点放在后一段
            } else {
            //后段当节点第一次插入时首尾指针都需要移动
                if(as == null){
                    as = cur;
                    ae = cur;
             //后段当节点不是第一次插入时只需要移动尾节点
                } else {
                    ae.next = cur;
                    ae = ae.next;
                }
            }
            //cur的移动放在外面,减少时间复杂度
            cur = cur.next;
            //计数器加加
            count++;
        }
        //遍历完成后进行拼接操作
        //前一段无数据时,直接返回后一段
        if(bs == null){
            return as;
        }
        //走到这一步说明前一段有数据,前后进行拼接
        be.next = as;
        //后一段有数据时,后一段尾巴一定要有null,要不然打印无法停下来
        if(as != null){
            ae.next = null;
        }
        //拼接完成后,返回第一段首节点
        return bs;
    }
}

后序:
今天的分享就到这里了,希望可以给大家带来帮助,喜欢的话记得三连哦,希望可以和大家一起学习,善交朋友,想一起学习的联系我哦!!!🍎🍎🍎

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

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

相关文章

Mathorcup数学建模竞赛第六届-【妈妈杯】B题:小区车位分布的评价和优化模型(附特等奖获奖论文和Java代码)

赛题描述 随着现代社会经济的快速发展,房地产成为国家经济发展中重要的经济增长点之一。而小区内汽车停车位的分布对于小区居民的上下班出行影响很大。请建立数学模型,解决下列问题: 问题1:分析评判小区汽车停车位分布是否合理的几个关键指标,建立评判车位分布合理的数学…

嵌入式Linux-对子进程的监控

1. 进程的诞生与终止 1.1 进程的诞生 一个进程可以通过 fork()或 vfork()等系统调用创建一个子进程&#xff0c;一个新的进程就此诞生&#xff01;事实上&#xff0c;Linux系统下的所有进程都是由其父进程创建而来&#xff0c;譬如在 shell 终端通过命令的方式执行一个程序./…

leetcode 1658. 将 x 减到 0 的最小操作数[python3 双指针实现与思路整理]

题目 给你一个整数数组 nums 和一个整数 x 。每一次操作时&#xff0c;你应当移除数组 nums 最左边或最右边的元素&#xff0c;然后从 x 中减去该元素的值。请注意&#xff0c;需要 修改 数组以供接下来的操作使用。 如果可以将 x 恰好 减到 0 &#xff0c;返回 最小操作数 &a…

HTML与CSS基础(四)—— CSS基础(选择器进阶、Emmet语法、背景属性、元素显示模式、三大特性)

一、选择器进阶目标&#xff1a;能够理解 复合选择器 的规则&#xff0c;并使用 复合选择器 在 HTML 中选择元素1. 复合选择器1.1 后代选择器&#xff1a;空格作用&#xff1a;根据 HTML 标签的嵌套关系&#xff0c;选择父元素 后代中 满足条件的元素 选择器语法&#xff1a;选…

第二章JavaWeb基础学习路线

文章目录什么是Java WebJava Web基础的技术栈关于我们的客户端与服务端&#xff08;BS&#xff09;我们客户端的形式**PC端网页****移动端**服务端应用程序关于请求&#xff08;request&#xff09;和响应(response)类比生活中的请求和响应服务器中的请求和响应项目的逻辑构成架…

CSS权威指南(六)文字属性

1.缩进和行内对齐 &#xff08;1&#xff09;缩进文本&#xff08;text-indent&#xff09; text-indent属性把元素的第一行文本缩进指定的长度&#xff0c;缩进的长度可以可以是负值。这个属性通常用于缩进段落的第一行。text-indent作用于块级元素之上&#xff0c;缩进将沿着…

config:配置中心

Spring Cloud Config 为分布式系统中的外部配置提供服务器端和客户端支持。使用 Config Server&#xff0c;您可以集中管理所有环境中应用程序的外部配置。 Spring Cloud Config就是一个配置中心&#xff0c;所有的服务都可以从配置中心取出配置&#xff0c;而配置中心又可以从…

mmap(内存映射)、sendfile() 与零拷贝技术

内存映射&#xff08;Memory-mapped I/O&#xff09;是将磁盘文件的数据映射到内存&#xff0c;用户通过修改内存就能修改磁盘文件。 RocketMQ为什么快&#xff1f;kafka为什么快&#xff1f;什么是mmap&#xff1f;这些问题都逃不过一个点&#xff0c;就是零拷贝。 虽然还有其…

电脑不能开机的几个常见原因

现在手机已经将电脑取代了&#xff0c;用电脑的越来越少&#xff0c;因为一些原因上网课的多了起来&#xff0c;大家都将放置几年的电脑搬了出来&#xff0c;开不开机的大有人在&#xff0c;由于机器闲置很久大多都出现了各种各样的故障和问题&#xff0c;在这里总结了电脑台式…

C语言:浮点型存储方式

浮点型存储方式 任意一个二进制浮点数V可以表示成下面的形式 (-1)^S *M *2^E 1&#xff08;S符号位&#xff09; 8&#xff08;E阶码&#xff09; 23&#xff08;M尾码&#xff09;省略首位1 S&#xff1a;表示正负 只有0/1两个值 M&#xff1a;由浮点数转化成二进制数表示 在…

4.7、IPv4 数据报的首部格式

固定部分&#xff1a;每个 IP 数据报首部都必须包含的内容 某些 IP 数据报的首部除了包含 202020 字节的固定部分外&#xff0c;还包含一些可选的字段来增加 IP 数据报的功能 IP 数据报的首部常以 323232 个比特为单位进行描述 图中的每一行都由 323232 个比特&#xff08;也…

小波分析——4.使用小波对信号成分进行分析

文章目录首先创建一个包含多频率成分的信号然后我们用数学实现一个墨西哥草帽小波然后我们开始对原始信号进行处理吧接下来可以把信号成分进行绘制在前面的章节里已经介绍过小波的理论、公式等知识点&#xff0c;现在我们来看看如何用小波来实现对复杂信号的成分分析。 在我们…

性能优化系列之『HTML5 离线化:主流的技术实现方案有哪些?』

文章の目录一、离线包类型二、离线包架构三、离线包下载四、离线包运行模式五、大厂离线包方案写在最后一、离线包类型 全局离线包&#xff1a;包含公共的资源&#xff0c;可供多个应用共同使用私有离线包&#xff1a;只可以被某个应用单独使用 二、离线包架构 三、离线包下载…

Fairness in Recommendation: A Survey 阅读笔记

论文链接 搁置了许久的毕设&#xff0c;又要开始重新启航。 2022年的最后一段时间过得真是很崎岖&#xff0c;2023希望大家平安喜乐。 课设还未结束&#xff0c;但是毕设不能再拖&#xff0c;开工啦&#xff01;这又是一篇综述&#xff0c;有关推荐系统中的公平性&#xff0c;…

5.Isaac教程--创建Isaac应用

创建Isaac应用 本教程将指导您完成使用 Isaac SDK 创建机器人应用程序的过程&#xff0c;以视频输入的 OpenCV 边缘检测处理为例。 文章目录创建Isaac应用预安装显示相机源创建应用程序文件启用节点间通信配置组件创建 Bazel 构建文件运行应用程序查看相机源处理相机源添加边缘…

1.6日报

以redis为基础完成 addCacheData getCacheDataByUniqueId delCacheDataByUniqueId 并且测试通过。 升级getQRcodeAndScene接口&#xff0c;添加版本参数&#xff0c;实现“不同环境取不同小程序版本“功能 并添加扫码跳转页面功能。 遇到的问题及解决 加深对RequestBody…

性能优化系列之『HTTP-2 :升级HTTP-2的好处有哪些?如何升级?』

文章の目录一、HTTP/2 概念二、HTTP/2 优点三、HTTP/2 站点的优势四、在 Nginx 上启用 HTTP/21、升级 OpenSSL2、重新编译3、验证 HTTP/24、浏览器请求截图写在最后一、HTTP/2 概念 HTTP/2&#xff08;超文本传输协议第2版&#xff0c;最初命名为 HTTP 2.0&#xff09;&#x…

【Spring AOP】@Aspect结合案例详解(一): @Pointcut使用@annotation + 五种通知Advice注解

文章目录前言AOP与Spring AOPAspect简单案例快速入门一、Pointcutannotation二、五种通知Advice1. Before前置通知2. After后置通知3. AfterRunning返回通知4. AfterThrowing异常通知5. Around环绕通知总结前言 在微服务流行的当下&#xff0c;在使用SpringCloud/Springboot框…

分布式基础篇3——前端开发基础知识

前端技术对比一、ES61、简介2、什么是 JavaScript3、ES6新特性3.1 let3.2 const3.3 解构表达式3.4 字符串扩展3.5 函数优化3.6 对象优化3.7 map 和 reduce3.8 Promise3.9 模块化二、Vue1、MVVM 思想2、Vue 简介3、Vue 入门案例4、Vue 指令插值表达式v-text、v-htmlv-bindv-mode…

景区地图最短路径快速实现

1 前言以前粗略学习了一下在地图中实现最短路径&#xff0c;并在切图工具中实现了自动处理生成导航相关数据。https://blog.csdn.net/bq_cui/article/details/86795213最近发现工具实现的结果&#xff0c;错误一大堆。这次再详细捋一捋整个步骤&#xff0c;感兴趣的同学可以试一…