python选出奇数并降序_奇数结点升序偶数结点降序的单链表排序(Python实现)
题目
一个链表,奇数结点升序,偶数结点降序,要求变成一个全升序的链表。
例如:1->8->2->7->3->6->4->5,变为1->2->3->4->5->6->7->8
解析
按照以下步骤处理:
按照奇偶位拆分为两个链表
反转偶数结点构成的链表
合并两个递增链表
Python实现
# -*- coding:utf-8 -*-
class Node(object):
def __init__(self, val=None, next=None):
self.val = val
self.next = next
def init_list(l):
"""创建不带头结点的单链表"""
head = Node()
tail = head
for val in l:
tail.next = Node(val)
tail = tail.next
tail.next = None
return head.next
def split_list(head):
"""按照奇偶位拆分为两个链表"""
head1 = head2 = None
cur1 = cur2 = None
count = 1
while head:
if count % 2 == 1:
if cur1:
cur1.next = head
cur1 = cur1.next
else:
cur1 = head1 = head
else:
if cur2:
cur2.next = head
cur2 = cur2.next
else:
cur2 = head2 = head
head = head.next
count += 1
cur1.next = None
cur2.next = None
return head1, head2
def reverse_list(head):
"""反转链表"""
if not head or not head.next:
return head
pre = next = None
while head:
next = head.next
head.next = pre
pre = head
head = next
return pre
def merge_list(head1, head2):
"""合并两个递增链表"""
head = Node() # 设置一个临时结点
tail = head
while head1 and head2:
if head1.val <= head2.val:
tail.next = head1
head1 = head1.next
else:
tail.next = head2
head2 = head2.next
tail = tail.next
# 合并剩余结点
if head1:
tail.next = head1
if head2:
tail.next = head2
return head.next
def visit_list(head):
while head:
print(head.val)
head = head.next
if __name__ == '__main__':
head = init_list([1, 8, 2, 7, 3, 6, 4, 5]) # 创建一个不带头结点的单链表:1->8->2->7->3->6->4->5
head1, head2 = split_list(head) # 1.按照奇偶位拆分为两个链表
head2 = reverse_list(head2) # 2.反转偶数结点构成的链表
head = merge_list(head1, head2) # 3.合并两个递增链表
visit_list(head) # 遍历链表
python选出奇数并降序_奇数结点升序偶数结点降序的单链表排序(Python实现)相关推荐
- python单链表排序_奇数结点升序偶数结点降序的单链表排序(Python实现)
题目 一个链表,奇数结点升序,偶数结点降序,要求变成一个全升序的链表. 例如:1->8->2->7->3->6->4->5,变为1->2->3-& ...
- 奇数位升序偶数位降序链表排序
题目描述:一个链表,奇数位升序偶数位降序,让链表变成升序的. 比如:1 8 3 6 5 4 7 2 9,最后输出1 2 3 4 5 6 7 8 9. 分析: 这道题可以分成三步: 首先根据奇数位和偶数 ...
- 奇数位升序偶数位降序的链表进行排序
题目描述:一个链表,特点是奇数位升序偶数位降序,使得链表变成升序的. 分析 代码 节点类: main方法: 初始化方法: 按照奇偶位拆分成两个链表: 反转链表: 合并两个有序链表(非递归): 合并两个 ...
- python怎么反转单链表_单链表反转python实现代码示例
单链表的反转可以使用循环,也可以使用递归的方式 1.循环反转单链表 循环的方法中,使用pre指向前一个结点,cur指向当前结点,每次把cur->next指向pre即可. 代码: class Li ...
- C语言-实现对单循环链表中奇数和偶数结点的移动(前面奇数结点后面偶数结点)
单循环链表是C语言中比较常见的一种链式储存结构. 相较于普通的单链表,其特点就在于单循环链表的尾指针指向的是头结点. 即: 1.单链表 2. 单循环链表的有点就在于方便访问第一个结点,还方便访问最后一 ...
- python 找到目录下文件名规则_假如编程是魔法之零基础看得懂的Python入门教程 ——(二)魔法实习生第一步了解魔杖的使用...
学习目标 了解什么是开发环境 了解python语言的环境安装 了解python语言编程的编辑器工具 一.打怪升级你先得了解武器使用的条件 对于很多第一次学习编程的同学对于很多定义性的概念大多都不了解, ...
- python自带的对称算法_一种基于对称算法和专用加载模块的Python程序模块加密方法...
一种基于对称算法和专用加载模块的Python程序模块加密方法 [专利说明]一种基于对称算法和专用加载模块的Python程序模块加密方法 技术领域 [0001]本发明涉及一种网络安全技术,具体涉及一种P ...
- 单链表的python实现
首先说下线性表,线性表是一种最基本,最简单的数据结构,通俗点讲就是一维的存储数据的结构. 线性表分为顺序表和链接表: 顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存 ...
- 头插法(逆序)和尾插法(顺序)实现单链表的创建与排序
链表是线性表的一种表示形式,和线性表的另一种表达形式--数组不同.在链表中,没有固定长度的设定,表中节点是彼此相连的,表中的每一个节点链接下一个节点(即后继),链表头(Head)指向链表的第一个节点. ...
最新文章
- Nat.Commun.|使用基于注意力机制的多标签神经网络预测并解释12种RNA修饰
- 谁动了我的内存之PHP内存溢出
- fullcalendar 显示的时间间隔只有四十五分钟_Linux命令行监控程序,还能实时高亮显示差异,我就选它了...
- 中小型互联网公司微服务实践-经验和教训
- python临床数据_从临床试验中获取数据
- [转载] 这100道练习,带你玩转Numpy
- matplotlib中ion()和ioff()的使用
- 雷赛服务器信号er020,伺服与雷赛控制卡配套的小技巧
- 电脑预览,电脑怎么预览psd格式?
- VMware Workstation12安装win 7企业版激活
- 码农造“神盘”:互联网人20年买房故事
- 北大先修课 计算机,北大先修课
- Javascript 面向对象编程(一):封装
- [转]我的世界观(一)
- 利用三轴加速器的计步测算方法
- AndroidIOS APP启动速度专项测试方法
- 买房应该全款还是贷款
- 上个月一位朋友买到翻新N80手机 淘宝充斥奸商假货 【该奸商为四钻】
- 青龙面板教程(五):代理设置
- Angular *NgFor - angular 基础教程
热门文章
- 推荐一款基于SpringBoot+Vue开发的分布式网盘系统(附源码)
- java面试题大合集(开发者必看二)
- 蓝桥杯-2的次幂表示(java)
- 帧布局(FrameLayout)及属性
- Java之进程与线程练习
- .sql文件如何执行_Excel如何运行可执行文件,别急,用过vba Shell函数的都知道
- (Oracle学习笔记) sql语言
- LeetCode 08字符串转整数09回文数
- layui上传报错会有哪些原因_数据丢失如何恢复?哪些原因会导致数据丢失
- 大数据架构详解_【数据如何驱动增长】(3)大数据背景下的数仓建设 amp; 数据分层架构设计...