常考数据结构与算法:单链表的排序
题目描述
给定一个无序单链表,实现单链表的排序(按升序排序)。
输入
[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;}
}
常考数据结构与算法:单链表的排序相关推荐
- 常考数据结构与算法:删除链表的倒数第n个节点
题目描述 给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 例如, 给出的链表为:1->2->3->4->5, n= 2.删除了链表的倒数第n个节点之后,链表变为1-& ...
- 常考数据结构与算法:反转链表
题目描述 输入一个链表,反转链表后,输出新链表的表头. 示例1 输入 {1,2,3} 返回值 {3,2,1} public class ReserverAlgo {public static void ...
- 常考数据结构与算法:输出二叉树的右视图
题目描述 请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图 上图树的右视图为:{1,4,3,7} 做此题之前可以先做下面3道题: 1. 常考数据结构与算法:求二叉树的层序遍历 2.常 ...
- 常考数据结构与算法:求二叉树的层序遍历
题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树层序遍历的结果是 [ [3], [9,20], ...
- 数据结构与算法--单链表相关面试题
此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢! 一.概述 获取单链表的有效元素个数[新浪面试题1] 获取单链表倒数第k个结 ...
- 常考数据结构与算法:两个链表的第一个公共结点
题目描述 输入两个链表,找出它们的第一个公共结点.(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) 面试的时候碰到这道题,很多应聘者的第一反应就是蛮力法:在第 ...
- 数据结构与算法-单链表的常见面试题(单链表的长度,单链表倒数第k个数据)
单链表的长度,单链表倒数第k个数据 求单链表中节点的个数 思路分析 完整代码 查找单链表中倒数第k个节点 思路如下: 全量代码 求单链表中节点的个数 在上一节代码的基础上我们来学习 思路分析 我们创建 ...
- 头歌平台数据结构与算法 单链表实验 第1关:倒置链表
任务描述 相关知识 实验目的 实验任务 实验说明 编程要求 测试说明 任务描述 本关任务:请在右侧编辑器的注释行填入适当内容来完成算法,以实现指定的功能,并通过运行来验证. 相关知识 实验目的 理解线 ...
- [数据结构与算法] 单链表的简单demo
Vc6之下编译通过.. 1 /******************************************************* 2 * @: Project: 单链表数据结构演示 3 * ...
最新文章
- mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换(上)
- Hyper-V之02 虚拟机复制与故障转移
- JAVA将 带有空格或特殊字符的字符串转换成int数组的方法
- C/C++中的##用法
- python kotlin_用Java和Python模仿Kotlin构建器
- 互联网晚报 | 8月26日 星期四 | 小米Q2营收净利均创单季历史新高;拼多多设立“百亿农研专项”;网易云音乐正式入驻闲鱼...
- 【转】js字符串转换成数字
- Entity Framework之问题收集
- MongoDB小结07 - update【$pop】
- Xilinx平台SRIO介绍(六)SRIO收发测试
- DRP项目知识点一: 数据库连接-封装Connection
- 视频教程-MATLAB高等数学计算与可视化-Matlab
- css栅格布局的四种大小xs,sm,md,lg
- 使用C#开发Excel插件
- ExtraMAME(mame模拟器)官方正式版V21.0下载 | ExtraMAME模拟器
- php阴历阳历换算(1950开始)
- 移动硬盘打不开,千万别轻易格式化
- 调用微信扫一扫接口/利用微信JS-SDK调用微信扫一扫功能
- pb3-protobuf 格式-上传 网络信息内容
- 原创小说 - 爱人失踪(第一部)