​LeetCode刷题实战328:奇偶链表

力扣网第328题——奇偶链表(C语言) 力扣网第328题——奇偶链表(C语言) 题目: 给定一个单链表,把所有的奇数结点和偶数结点分别排在一起。请注意,这里的奇数结点和偶数结点指的是结点编号的奇偶性,而不是结点的值的奇偶性。 请尝试使用原地算法完成。你的算法的空间复杂度应为O(1),时间复制度应为O(nodes),nodes为结点总数。 实例1: 输入:1->2->3->4->5->NULL 输出:1-&g... 阅读详情

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 奇偶链表,我们先来看题面:

https://leetcode-cn.com/problems/odd-even-linked-list/

Given the head of a singly linked list, group all the nodes with odd indices together followed by the nodes with even indices, and return the reordered list.

The first node is considered odd, and the second node is even, and so on.

Note that the relative order inside both the even and odd groups should remain as it was in the input.

You must solve the problem in O(1) extra space complexity and O(n) time complexity.

给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。

请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。

示例

示例 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

说明:

应当保持奇数节点和偶数节点的相对顺序。
链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。

解题

https://www.cnblogs.com/jiameng991010/p/11282534.html

算法思想:

1、根据奇偶数原则,首先将odd指向head,even指向head.next,同时evenhead也指向head.next。

2、接下来,分别以odd开头“删除”偶数链表,以even 开头删除奇数链表。这样一来将整个链表拆分为两个链表。同时保留了三个节点,分别是odd(奇数链表的最后一个节点),even(偶数链表最后一个节点),evenhead(偶数链表第一个节点)。

3、最后只需将奇偶链表连接起来即可。odd.next=evenhead,大功告成!!!

算法分析:

此算法是在原地修改,并没有开辟新的存储空间,因此空间复杂度是O(1);

对于时间复杂度来说,需要迭代整个链表,因此时间复杂度是O(nodes)。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 * int val;
 * ListNode next;
 * ListNode(int x) { val = x; }
 * }
 */
class Solution 
{
    public ListNode oddEvenList(ListNode head) 
    {
        if(head==null)
            return null;
        if(head.next==null||head.next.next==null)
            return head;
        ListNode odd=head;
        ListNode even=head.next;
        ListNode evenhead=even;//此处的evenhead是链表奇偶化之后偶半链的第一个节点,在下买你的while循环中,evenhead一直处于无前驱节点状态
        while(odd.next!=null&&even.next!=null){
            odd.next=odd.next.next;
            even.next=even.next.next;
            odd=odd.next;
            even=even.next;
        }//经过while循环之后,实际上链表已经被切成两半了,一般是奇链表,一半是偶链表,其中保留了两个指针,一个是odd奇链表的最后一个元素,evenhead是偶链表的第一个节点。
        odd.next=evenhead;//将奇偶链表连接起来
        return head;
    }
}

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。

上期推文:

LeetCode1-320题汇总,希望对你有点帮助!

LeetCode刷题实战321:拼接最大数

LeetCode刷题实战322:零钱兑换

LeetCode刷题实战323:无向图中连通分量的数目

LeetCode刷题实战324:摆动排序 II

LeetCode刷题实战325:和等于 k 的最长子数组长度

LeetCode刷题实战326:3的幂

LeetCode刷题实战327:区间和的个数

c代码-奇数节点和偶数节点分别排在一起_链表 立即下载

相关推荐

3D-IC测试挑战与Tessent解决方案解析

3D-IC技术通过硅通孔(TSV)实现芯片垂直堆叠,是延续摩尔定律的关键路径。该技术面临三大核心挑战:KGD标准严苛化要求测试覆盖率达99.5%以上,存储器测试需兼容LPDDR/HBM等多种协议,逻辑堆叠需解决TSV互连的电气特性和时序验证问题。Mentor Tessent平台采用混合测试架构,结合压缩扫描测试(ATPG)和内建自测试(BIST)技术,实现100x测试数据压缩比和99.97%的TSV缺陷检出率。这些创新方案在移动SoC和高性能计算芯片中已获验证,测试时间缩短73%,缺陷逃逸率降低77%。随着

weixin_30621711的博客 376

双循环链表奇偶位序结点排序

严奶奶的第2.37题:设以带头结点的双向循环链表表示的线性表L=(a1, a2, … an)。试写一个时间复杂度为O(n)的算法 ,将L改造为L=(a1, a3, …, an, … a4, a2)。 解题思路:按照正常的思路,我们会把偶数位序的结点从左到右依次插入到尾结点之后。因此,尾结点必须固定,再有一个指向偶数位序结点的遍历结点指针。基本操作即为:取出偶数位序结点,插入尾结点之后,继续相同...

超人不会飞 829

QMI8658A与QMC5883L(9轴)评估板实战指南:从硬件连接到数据校准

本文提供了QMI8658A与QMC5883L九轴传感器评估板的完整实战指南。详细介绍了从硬件I2C/USART连接到传感器零偏与地磁校准的关键步骤,并利用上位机实现数据可视化,帮助开发者快速上手9轴姿态传感技术,应用于无人机、机器人等领域。

metaverse5vr的博客 478

双链表偶数节点求和java_LeetCode 328——奇偶链表(JAVA)

给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4-...

weixin_29924309的博客 260

STM32单片机语音提示盲人拐杖整点报时夜间警示超声波测距

STM32单片机语音提示盲人拐杖整点报时夜间警示超声波测距 关键词:语音提示盲人拐杖 整点报时 超声波测距拐杖

LS840233684的博客 2047

从像素到光影:解析《黑神话:悟空》中Nanite与Lumen的协同渲染革命

本文深度解析了《黑神话:悟空》如何利用Unreal Engine 5的Nanite与Lumen技术实现渲染革命。Nanite处理亿级多边形几何细节,无需传统LOD优化;Lumen提供全动态全局光照,实现实时光线反弹。两者协同工作,为游戏带来电影级视觉体验,重塑了实时渲染的技术标准与工作流程。

f6g7h8i9j的博客 425

2021-8-13 328. 奇偶链表(节点分离与合并)

注: 题目: 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。 示例 1: 输入: 1->2->3->4->5->NULL 输出: 1->3->5->2->4->NULL 示例 2: 输入: 2->1->3->5->6-

TABE_的博客 1432

移植 lwip,在 windows 内核构建一个 TCPIP 协议栈

移植 lwip,在 windows 内核构建一个 TCPIP 协议栈 亲,当你点开看这篇文章,就说明你知道我想要干什么事情,或者说,你知道在 Windows 的内核种绕开它的网络协议,再独立构建一个网络协议栈的意义。如果你要问我有 windows 系统的网络协议栈不用,移植 lwip 有什么意义,那么你可以关闭链接走人了,因为这篇文章不适合你,它不是讲 lwip 移植原理的。 经常关注我的博客的朋...

oRbIt 的专栏 3576

【JavaScript算法】-链表合辑02

力扣刷题,链表相关

zztjl的博客 204

无法找到来自源 nvlddmkm 的事件 ID 14 的描述

具体错误是: 无法找到来自源 nvlddmkm 的事件 ID 14 的描述。本地计算机上未安装引发此事件的组件,或者安装已损坏。可以安装或修复本地计算机上的组件。 出现这样错误的原因有很多了,有可能是硬件有可能是软件。由于我是刚配置的电脑,起初非常怀疑是自己组装的问题,折腾了好久,心态爆炸!!!先说我报这样错误的情况,以及解决办法,供后面人参考。 ...

SeventhBlue 6万+

告别高延迟!用RV1106+4G模块+libdatachannel搭建低功耗WebRTC监控,保姆级避坑指南

本文详细介绍了如何利用RV1106低功耗处理器、4G模块和libdatachannel库构建嵌入式WebRTC监控系统,解决高延迟问题。通过硬件选型、系统优化和核心代码实现,提供了一套完整的低功耗实时视频传输方案,特别适合智能安防和工业物联网应用。

weixin_42527401的博客 192

算法例子:拆分(按照奇偶位置)双向链表为两个链表(Java)

1.例子描述 将一个双向链表,按照奇偶位置进行拆分成两个链表 即: 1.双向链表中偶数位置的结点组成一个链表. 2.双向链表中奇数位置的结点组成一个链表. 3.拆分完成后,双向链表变成了空链表. 2.实现思路 4.打印结果 待分割的链表: head->tail:[1,2,3,4,5,6,7,8,9,10] ---------存储偶数位置结点的链表---------- head->tail:[2,4,6,8,10] tail-->head:[10,8,6,4,2] ---------存储奇

forwardyzk的专栏 2489

【SystemVerilog基础】SystemVerilog Assertion 概述

断言主要是描述复杂的设计行为;是传统验证方法学一个很好的补充,可以检查到电路内部细节,相当于一种白盒验证,传统的验证方法学是纯粹的黑盒验证!property跟上面的sequence差别不大,唯一有差别可能多了两个implication(|->,|=>)注意,当有前置条件时,不满足前置条件不会fail,而是伪真!上面这个因为没有前置条件,每个周期都会去检查!注意:当没有前置条件时,不满足条件会直接fail!

MoorePlus的博客 332

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

力扣第328题,奇偶链表,带大家一起刷题,点点滴滴也是进步。

程序员良辰 990

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

LeetCode第328题_奇偶链表

本文解析LeetCode第328题"奇偶链表",提供双指针解法及C#、Python、C++三种实现。该题要求将所有奇数位和偶数位的节点分别组合,保持相对顺序。双指针法时间复杂度O(n),空间复杂度O(1),是高效解法。文章包含详细步骤图解、代码亮点分析、常见错误提示及性能对比,适合想提升链表操作能力的程序员。附带相关题目推荐和互动交流提示,帮助读者系统学习链表操作。

qq_40263592的博客 1024

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

数据结构之线性表——LeetCode:328. 奇偶链表,86. 分隔链表,24. 两两交换链表中的节点

它通过遍历链表,将奇数索引的节点组成一个链表,偶数索引的节点组成另一个链表,最后将偶数链表连接到奇数链表的末尾。它采用递归的方式,从链表的头部开始,每次交换两个相邻节点,并继续递归处理剩余的链表部分。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。的节点之前,同时保持两个分区中每个节点的初始相对位置。给你一个链表的头节点。

u014114223的博客 1170

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

leetcode 328.奇偶链表

leetcode 328.奇偶链表题目描述分析:java代码:示例一过程图解: 题目描述 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。 示例 1: 输入: 1->2->3->4->5->NULL 输出: 1->3->5->2->4->NUL

IAMLSL的博客 518

LeetCode 328:奇偶链表

目录LeetCode 328:奇偶链表题目描述解题最开始思路循环体中的冗余 LeetCode 328:奇偶链表 题目描述 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。 【示例 1】 输入: 1->2->3->4->5->NULL 输出: 1->3->5-&g

s_Shune 256

【中等】力扣算法题解析LeetCode328:奇偶链表

LeetCode328要求将单链表的奇数位和偶数位节点分组后重新连接。解法使用双指针(odd和even)分离奇偶节点:odd遍历奇数索引节点,even遍历偶数索引节点,并记录偶数头节点evenHead。通过循环更新指针的next指向,最后将奇数链尾节点连接evenHead。时间复杂度O(n),空间复杂度O(1)。 示例: 输入[1,2,3,4,5]输出[1,3,5,2,4]。代码通过原地修改指针实现,保持节点相对顺序。 核心点:边界处理、双指针分离、合并链表。

ylumwd的博客 784

LeetCode328. 奇偶链表

LeetCode328. 奇偶链表 1. 问题描述 2. 思路 双指针 odd指向奇数位,even指向偶数位 head指向奇数位的头部,evenHead指向偶数位的头部 将奇数链表和偶数链表连接起来 3. 代码 /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func oddEvenList(head *ListNode)

菜到不敢run 4061

LeetCode Java面试刷题笔记汇总

LeetCode Java刷题笔记汇总,按照类型刷题效率更高。

终生学习践行者 2948

LeetCode 328 奇偶链表

LeetCode 328 奇偶链表 题目链接 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。 示例 1: 输入: 1->2->3->4->5->NULL 输出: 1->3->5->2->4->NULL 示例 2: 输入: 2->1-&

旺崽的博客 2517

力扣题解-328. 奇偶链表

双指针方法

lpp 5088

我的LeetCode刷题指南:链表部分

我的Leetcode链表刷题笔记概论

charlie114514191的博客 999

leetcode-328 | 奇偶链表

title: leetcode-328 | 奇偶链表 date: 2019-5-4 18:28:26 comments: true categories: “leetcode” tags: - leetcode 中等难度 - 链表 题目描述 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法...

梦否 402

[链表]leetcode328-奇偶链表

[链表]–奇偶链表 题目链接 leecode 328.奇偶链表 题目 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。 示例 输入: 1->2->3->4->5->NULL 输出: 1->3->5->2->4->NULL 输入: 2-&gt

weixin_44014218的博客 273
上一篇: 华为内部论坛: 社会内卷的真正原因
下一篇: 知乎高赞:while (true) 和 for (;;) 到底哪个更快?
编程IT圈
博客等级 码龄6年 1130粉丝 544原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值