题目

一个链表,奇数结点升序,偶数结点降序,要求变成一个全升序的链表。 例如: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实现)相关推荐

  1. 奇数位升序偶数位降序链表排序

    题目描述:一个链表,奇数位升序偶数位降序,让链表变成升序的. 比如:1 8 3 6 5 4 7 2 9,最后输出1 2 3 4 5 6 7 8 9. 分析: 这道题可以分成三步: 首先根据奇数位和偶数 ...

  2. 奇数位升序偶数位降序的链表进行排序

    题目描述:一个链表,特点是奇数位升序偶数位降序,使得链表变成升序的. 分析 代码 节点类: main方法: 初始化方法: 按照奇偶位拆分成两个链表: 反转链表: 合并两个有序链表(非递归): 合并两个 ...

  3. python选出奇数并降序_奇数结点升序偶数结点降序的单链表排序(Python实现)

    题目 一个链表,奇数结点升序,偶数结点降序,要求变成一个全升序的链表. 例如:1->8->2->7->3->6->4->5,变为1->2->3-& ...

  4. MYSQL 数据库基础(三 流程函数的学习,多行函数相当于统计计算等等、group by的使用、goup by衍生出的having、排序关键字order by、升序ASC、降序DESC、模糊查询等)

    流程函数 类似与java中的判断情况 的学习 实际应用: -- 满足条件执行 第一个逗号后面的 否则执行第二个逗号 SELECT ename,sal,IF(sal<2500,'低于2500',' ...

  5. pandas中dataframe索引排序实战:pandas中dataframe索引降序排序、pandas中dataframe索引升序排序

    pandas中dataframe索引排序实战:pandas中dataframe索引降序排序.pandas中dataframe索引升序排序 目录

  6. Java stream().sorted()实现排序(升序、降序、多字段排序)

    1 自然排序 sorted():自然排序,流中元素需实现Comparable接口 package com.entity;import lombok.*;@Data @ToString @AllArgs ...

  7. R语言使用order函数按照两个数据列的值排序data.table数据(主变量降序排序、次变量升序排序)

    R语言使用order函数按照两个数据列的值排序data.table数据(主变量降序排序.次变量升序排序) 目录

  8. Java学习(90)Java集合排序——Comparator接口介绍、案例:对宠物猫分别按名字升序、年龄降序进行排列

    Java集合排序--Comparator接口介绍.案例:对宠物猫分别按名字升序.年龄降序进行排列 Comparator接口介绍 1. Comparator接口: 2. Comparator接口中的co ...

  9. seaborn使用boxplot函数可视化箱图并基于分组均值或者中位数进行箱图降序(descending)排序(Sort Boxplots in Descending Order)

    seaborn使用boxplot函数可视化箱图并基于分组均值或者中位数进行箱图降序(descending)排序(Sort Boxplots in Descending Order with Pytho ...

最新文章

  1. 什么?神经网络还能求解高级数学方程?
  2. Make!Sense 动手好伴侣,带你轻松做实验
  3. 基于链表的快速排序C语言,双向链表的快速排序算法,编译通过,程序会崩溃,求助一下各位...
  4. ASP.NET Core MVC+EF Core从开发到部署
  5. C++基础知识(四)—— 操作符/运算符
  6. excel怎么删除浏览记录 方法介绍
  7. python使用opencv_教你快速使用OpenCV/Python/dlib進行眨眼檢測識別!
  8. 【python】numpy array 找出符合条件的数并赋值
  9. http与https与socket tcp/IP与UDP 协议等
  10. VMware vSphere Hypervisor (ESXi) 6.7 U3(转载)
  11. 如何利用快解析快速实现动态域名解析,内网穿透?
  12. Java8增加功能--Effectively final 功能
  13. 上海电力学院计算机软件技术大作业,计算机硬件技术大作业报告2.doc
  14. 光学系统建模之Light Tools安装关键点、教程指引
  15. 解决fatal: could not get a repository handle
  16. Python 3.x 安装 web.py ,血泪!!
  17. javaweb面向对象
  18. 力天创见仓库客流管控方案
  19. Canvas和SVG的区别
  20. 基于机智云平台的泵站智能巡检系统

热门文章

  1. html实现拖拽自定义表单,自定义表单(二)--拖拽(HTML版本)
  2. 在线直播源码搭建直播平台的后端
  3. excel用宏如何筛选日期_Excel自动筛选宏
  4. tkinter-grid布局详解
  5. UI UX 小提示合集 -- 第一集
  6. Java练习——学生宿舍管理系统Day10
  7. 统计信号处理 (估计三): Cramer-Rao下限
  8. 【Android】蓝牙设备--游戏手柄作为遥控门铃工具试验
  9. 如何将AVI格式的视频转换为MP4?用嗨格式试试看
  10. 备考红帽的小伙伴们注意啦,RHCA的证书是这样的...