单链表排序

  • **BM12** **单链表的排序**
  • 链接
  • 问题描述
  • 代码

BM12 单链表的排序

链接

单链表的排序_牛客题霸_牛客网 (nowcoder.com)

问题描述

给定一个节点数为n的无序单链表,对其按升序排序。

数据范围: 0 < n≤100000
要求:空间复杂度O(n),时间复杂度0(nlogn)

示例1

输入: [1,3,2, 4,5]
返回值: {1,2,3,4,5}

示例2

输入: [-1,0,-2]
返回值: {-2,-1,0}

代码

这个是O(n²)的算法,选择排序

import random# 链表的结点结构
class ListNode:def __init__(self, x):self.val = xself.next = None
# 传入一个数组,创建一个链表
def create_list(values):head = ListNode("head")current = headfor value in values:node = ListNode(value)current.next = nodecurrent = nodereturn head
# 输出一个链表
def print_list(head):current = head.nextwhile current:print(current.val,end=" ")current = current.nextprint()class Solution:# 链表排序def sortInList(self , head: ListNode) -> ListNode:# 1、设置新的头,设置一下当前指向的节点currentnew_head = ListNode("head")current = head.next# 2、current往后扫,摘掉一个接到newhead上while current:self.insert(new_head,current)current = current.nextreturn new_head# 传入一个链表结点,插入到linkedlist中def insert(self,linkedlist,node):# 保存头结点和当前节点,包装一个newnodehead = linkedlistcurrent = headnew_node = ListNode(node.val)# 往后找,找到比他大的if current.next is None:head.next = new_nodereturn# 将节点插入到这个位置while current.next is not None and current.next.val < node.val:current = current.nextnew_node.next = current.nextcurrent.next = new_nodemy_list = [random.randint(-100000,10000000) for i in range(100000)]
my_linklist = create_list(my_list)
# print_list(my_linklist)
s = Solution()
print_list(s.sortInList(my_linklist))

作弊的方法:O(nlogN)

class Solution:def sortInList(self, head):# write code herelist1 = []cur = headwhile cur:list1.append(cur.val)cur = cur.nextcur = headfor i in sorted(list1):cur.val = icur = cur.nextreturn head

牛客 - 单链表排序相关推荐

  1. 面试题精选:单链表排序也能玩出花来

    今天国庆节,祝大家中秋节快乐,顺便给大家拜个早年[狗头].不过最近还在准备面试的同学们不要浪太狠,还是要好好学习的鸭. 单链表的排序在数据结构类的面试题中简直是集大成者,什么排序.链表.链表删除.添加 ...

  2. 单链表排序----快排 归并排序

    单链表排序----快排 & 归并排序 原文:http://blog.csdn.net/u012658346/article/details/51141288 题目描述:  给定一个乱序的单链表 ...

  3. 单链表排序之直接插入排序

    ****单链表排序之直接插入排序**** /*前段时间刚学会几种排序方法,最近学习了单链表,就用来试试,本篇链表的排序方法<一>讲述的是单链表的直接插入排序:(注意:请仔细看准节点结构体的 ...

  4. python单链表排序_单链表排序之选择排序

    单链表排序是单链表的常见编程任务之一,也是面试中经常出现的题目.单链表排序的关键是交换算法,需要额外考虑.选择排序是比较直观的排序算法之一,这里就使用选择排序实现单链表的排序. C实现代码如下: Li ...

  5. 单链表的应用--对单链表排序

      对单链表进行排序,利用前文写好的链表的框架,在链表类中补充Sort方法. 对单链表排序 一.问题分析 二.代码分析 1.链表类LinkList 2.链表方法Sort 三.测试代码 1.主函数 2. ...

  6. 单链表排序(交换节点)

    单链表排序(移动节点) 单链表排序利用了选择排序的方式: 创建一个单链表结构体 typedef int data_t;//为了能适应存储其他类型数据,可以将int换成其他数据类型而不通用一个一个更改程 ...

  7. 【百日冲大厂】第二篇,牛客网选择题+排序子序列+倒置字符串

    前言: 大家好,我是良辰丫,今天是刷题的第二篇,牛客网选择题+排序子序列+倒置字符串,每天都去努力,每天都庆幸今天的自己比昨天的自己更优秀,加油,为理想而努力吧!!!

  8. C语言版--单链表排序,冒泡排序,选择排序,插入排序,快速排序,应有尽有,保证看懂,没有bug!交换节点版本!

    一.废话不多说,直接上代码.如果想看双向循环链表的朋友,可以在我的博客里找. 你好 #include <stdio.h> #include <stdlib.h>typedef ...

  9. 牛客网 链表结构 算法相关内容

    链表结构 单链表的节点结构  由以下结构的节点依次连接起来所形成的链叫单链表结构 Clas Node<V>{ V value; Node next; } 双链表的节点结构 由以下结构的节点 ...

最新文章

  1. 亚洲诚信带你玩转[2018国家网络安全宣传周]上海地区活动!
  2. python计算出nan_python如何进行汇总统计?
  3. 用html标记语言,HTML标记语言——引用
  4. vim 格式化json
  5. Hash(LCP) || 后缀数组 LA 4513 Stammering Aliens
  6. Val编程-界面编程
  7. django分页功能 views与templates
  8. The Gradient Operator
  9. android知识杂记(一)
  10. python hog特征提取,直接从原始图像的HoG特征提取编辑图像的HoG特征
  11. PyCharm下载及安装教程(Windows)
  12. 正负筛选(neo正向+HSV-tk负向)原理
  13. 水下机器人ROV和AUV
  14. linux系统单网卡绑定双IP的方法
  15. 互联网开发搞手游创作1-为何有这想法
  16. MATLAB基础--MATLAB图像处理基础
  17. python+django大学生专业社团信息管理系统
  18. 外挂制作之思路总结和基址与偏移量
  19. 李航统计学习方法 Chapter2 感知机
  20. 一款简约WordPress Qui-Pure博客主题,自媒体模板

热门文章

  1. iwebshop框架中如何处理SQL?
  2. python tkinter详解
  3. 机器学习面试知识点总结(更新中...)
  4. MySQL的ADO控件_力控组态软件后台组件Ado组件的控件方法1
  5. AutoCAD DxfCode组码值类型(一)
  6. github国内网访问方式
  7. STM32F10x并行驱动lcd12864遇到的问题及其解决方案
  8. 姿态解算与左右手坐标系
  9. The 6th Zhejiang Provincial Collegiate Programming Contest
  10. jom qt linux,【求助】Qt Creater编译问题——jom.exe退出