链表(篇3)链表中将所有的偶数移到奇数后面不改变原来的相对位置

2024-09-04 02:08

本文主要是介绍链表(篇3)链表中将所有的偶数移到奇数后面不改变原来的相对位置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

给定一个整数的链表,写一个函数来修改链表,使得所有偶数出现在修改链表的所有奇数之前。 此外,保持偶数和奇数的顺序相同。

示例:
输入:17-> 15-> 8-> 12-> 10-> 5-> 4-> 1-> 7-> 6-> NULL
输出:8-> 12-> 10-> 4-> 6 - > 17-> 15-> 5-> 1-> 7-> NULL

输入:8-> 12-> 10-> 5-> 4-> 1-> 6-> NULL
输出:8-> 12-> 10-> 4-> 6-> 5-> 1-> NULL

//如果所有数字都是偶数,则不改变列表
输入:8-> 12-> 10-> NULL
输出:8-> 12-> 10-> NULL

//如果所有数字都是奇数,则不改变列表
输入:1-> 3-> 5-> 7-> NULL
输出:1-> 3-> 5-> 7-> NULL


解法1:
取下头结点,顺序取下后面的节点插到头节点后面,当该节点值是偶数时将其插入到最后面,如果是奇数将其插入到所有奇数后面偶数前面。依次遍历所有的节点。
时间复杂度O(N*N);
代码


ListNode Segregate(ListNode head){ListNode phead=new ListNode(0);ListNode pre=head;ListNode qre=phead;ListNode next;while(pre!=null){qre=phead;if((pre.val&1)==0){while(qre.next!= null){qre=qre.next;}next=pre;pre=pre.next;qre.next=next;next.next=null;//如果是偶数就直接放到新链表的最后面}else if((pre.val&1)==1){while(qre.next!=null&&(qre.next.val&1)==1){qre=qre.next;//如果是奇数,就放到新链表最后一个奇数的后面,第一个偶数的前面}if(qre.next== null){next=pre;pre=pre.next;qre.next=next;next.next=null;//如果新链表中没有偶数节点就将节点放在最后}else {next=pre.next;pre.next=qre.next;qre.next=pre;pre=next;//如果有偶数节点放在偶数节点前面。}}}return phead.next;}

解法2
先找到链表的最后一个节点,然后再遍历链表,将偶数节点依次连接到最后一个节点后面。要记住标记最后一个节点以便结束遍历。时间复杂度O(N)。


代码


ListNode Segregate(ListNode head,int tag){ListNode phead=new ListNode(0);ListNode tail;ListNode pre=head;phead.next=head;ListNode qre=phead;ListNode ptail;if(pre==null||pre.next==null)return head;while(pre.next!=null){pre=pre.next;}tail=pre;//找到最后一个节点pre=head;ptail=tail;while(pre!=tail.next){if((pre.val&1)==0){//当前节点值为偶数时将其放到链表的最后面qre.next=pre.next;ptail.next=pre;ptail=ptail.next;           }else {qre=qre.next;}pre=pre.next;}ptail.next=null;//最后尾指针一定要指向空,不然输出时循环不会结束。return phead.next;}

这篇关于链表(篇3)链表中将所有的偶数移到奇数后面不改变原来的相对位置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134696

相关文章

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

浅析Python中的绝对导入与相对导入

《浅析Python中的绝对导入与相对导入》这篇文章主要为大家详细介绍了Python中的绝对导入与相对导入的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1 Imports快速介绍2 import语句的语法2.1 基本使用2.2 导入声明的样式3 绝对import和相对i

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi