题目描述

给定一个无序单链表,实现单链表的排序(按升序排序)。

输入

[1,3,2,4,5]

返回值

{1,2,3,4,5}

public class SortInListME {public static void main(String[] args) {ListNode l1 = new ListNode(1);  // 1,3,2,5,4ListNode l2 = new ListNode(3);ListNode l3 = new ListNode(2);ListNode l4 = new ListNode(5);ListNode l5 = new ListNode(4);l1.next = l2;l2.next = l3;l3.next = l4;l4.next = l5;SortInListME sortInListME = new SortInListME();ListNode resutl = sortInListME.sortInList2(l1);sortInListME.printList(resutl);}public void printList(ListNode head) {ListNode curNode = head;//循环遍历到尾节点while (curNode != null) {System.out.print(curNode.val + "  ");curNode = curNode.next;}System.out.println();}/** 递归将链表分为两部分,每部分排好序以后,合并这两个排好序的链表即可 */public ListNode sortInList2 (ListNode head) {// write code hereif (null == head || head.next == null) {return head;}ListNode p1 = head;ListNode p2 = head.next; // 1,3,2,5,4while (p2 != null && p2.next != null) {p1 = p1.next;p2 = p2.next.next;}ListNode p2Head = sortInList2(p1.next);p1.next = null;ListNode p1Head = sortInList2(head);ListNode pre = new ListNode(0);ListNode ansPre = pre;while (p1Head != null && p2Head != null) {if (p1Head.val < p2Head.val) {pre.next = p1Head;p1Head = p1Head.next;} else {pre.next = p2Head;p2Head = p2Head.next;}pre = pre.next;}pre.next = p1Head == null ? p2Head : p1Head;return ansPre.next;}/*** 下面的方法,只能替换节点中的值,不能替换实际的节点* @param head ListNode类 the head node* @return ListNode类*/public ListNode sortInList (ListNode head) {int temp;ListNode curNode = head;while(null != curNode){// 内循环从当前节点的下一个节点开始ListNode nextNode = curNode.next;while(null != nextNode){if(nextNode.val < curNode.val){temp = curNode.val;curNode.val = nextNode.val;nextNode.val = temp;}nextNode = nextNode.next;}curNode = curNode.next;}return head;}
}

常考数据结构与算法:单链表的排序相关推荐

  1. 常考数据结构与算法:删除链表的倒数第n个节点

    题目描述 给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 例如, 给出的链表为:1->2->3->4->5, n= 2.删除了链表的倒数第n个节点之后,链表变为1-& ...

  2. 常考数据结构与算法:反转链表

    题目描述 输入一个链表,反转链表后,输出新链表的表头. 示例1 输入 {1,2,3} 返回值 {3,2,1} public class ReserverAlgo {public static void ...

  3. 常考数据结构与算法:输出二叉树的右视图

    题目描述 请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图 上图树的右视图为:{1,4,3,7} 做此题之前可以先做下面3道题: 1. 常考数据结构与算法:求二叉树的层序遍历 2.常 ...

  4. 常考数据结构与算法:求二叉树的层序遍历

    题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树层序遍历的结果是 [ [3], [9,20], ...

  5. 数据结构与算法--单链表相关面试题

    此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢! 一.概述 获取单链表的有效元素个数[新浪面试题1] 获取单链表倒数第k个结 ...

  6. 常考数据结构与算法:两个链表的第一个公共结点

    题目描述 输入两个链表,找出它们的第一个公共结点.(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) 面试的时候碰到这道题,很多应聘者的第一反应就是蛮力法:在第 ...

  7. 数据结构与算法-单链表的常见面试题(单链表的长度,单链表倒数第k个数据)

    单链表的长度,单链表倒数第k个数据 求单链表中节点的个数 思路分析 完整代码 查找单链表中倒数第k个节点 思路如下: 全量代码 求单链表中节点的个数 在上一节代码的基础上我们来学习 思路分析 我们创建 ...

  8. 头歌平台数据结构与算法 单链表实验 第1关:倒置链表

    任务描述 相关知识 实验目的 实验任务 实验说明 编程要求 测试说明 任务描述 本关任务:请在右侧编辑器的注释行填入适当内容来完成算法,以实现指定的功能,并通过运行来验证. 相关知识 实验目的 理解线 ...

  9. [数据结构与算法] 单链表的简单demo

    Vc6之下编译通过.. 1 /******************************************************* 2 * @: Project: 单链表数据结构演示 3 * ...

最新文章

  1. mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换(上)
  2. Hyper-V之02 虚拟机复制与故障转移
  3. JAVA将 带有空格或特殊字符的字符串转换成int数组的方法
  4. C/C++中的##用法
  5. python kotlin_用Java和Python模仿Kotlin构建器
  6. 互联网晚报 | 8月26日 星期四 | 小米Q2营收净利均创单季历史新高;拼多多设立“百亿农研专项”;网易云音乐正式入驻闲鱼...
  7. 【转】js字符串转换成数字
  8. Entity Framework之问题收集
  9. MongoDB小结07 - update【$pop】
  10. Xilinx平台SRIO介绍(六)SRIO收发测试
  11. DRP项目知识点一: 数据库连接-封装Connection
  12. 视频教程-MATLAB高等数学计算与可视化-Matlab
  13. css栅格布局的四种大小xs,sm,md,lg
  14. 使用C#开发Excel插件
  15. ExtraMAME(mame模拟器)官方正式版V21.0下载 | ExtraMAME模拟器
  16. php阴历阳历换算(1950开始)
  17. 移动硬盘打不开,千万别轻易格式化
  18. 调用微信扫一扫接口/利用微信JS-SDK调用微信扫一扫功能
  19. pb3-protobuf 格式-上传 网络信息内容
  20. 原创小说 - 爱人失踪(第一部)

热门文章

  1. Perl的输出:print、say和printf、sprintf
  2. windows下定时利用bat脚本实现ftp上传和下载
  3. bzoj2337: [HNOI2011]XOR和路径
  4. Hibernate的四种典型例子(增删改查)
  5. 浙江大学PAT上机题解析之1009. 说反话 (20)
  6. 云计算简介+云计算建站平台
  7. 购买绝版书的好地方——淘宝
  8. 贪吃蛇游戏(c/c++)
  9. 构建物联网网络的4个关键步骤简介
  10. 线性方程组与基尔霍夫定律