链表(篇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

相关文章

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

在Java中将XLS转换为XLSX的实现方案

《在Java中将XLS转换为XLSX的实现方案》在本文中,我们将探讨传统ExcelXLS格式与现代XLSX格式的结构差异,并为Java开发者提供转换方案,通过了解底层原理、性能优势及实用工具,您将掌握... 目录为什么升级XLS到XLSX值得投入?实际转换过程解析推荐技术方案对比Apache POI实现编程

如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)

《如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)》:本文主要介绍如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)问题,具有很好的参考价值,希望对大家有所帮助,如有... 目录先在你打算存放的地方建四个文件夹更改这四个路径就可以修改默认虚拟内存分页js文件的位置接下来从高级-

PyCharm如何更改缓存位置

《PyCharm如何更改缓存位置》:本文主要介绍PyCharm如何更改缓存位置的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm更改缓存位置1.打开PyCharm的安装编程目录2.将config、sjsystem、plugins和log的路径

使用easy connect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题

《使用easyconnect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题》:本文主要介绍使用easyconnect之后,maven无法... 目录使用easGWowCy connect之后,maven无法使用,原来需要配置-DJava.net.pr

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语言代码实现:将一个整