`
stephen4留雨
  • 浏览: 19012 次
文章分类
社区版块
存档分类
最新评论

单向链表插入排序 Java

 
阅读更多

游动指针h ; 待插入节点指针pt

节点插入关键:h.next = pt; 不可能是h = pt, 链到指针的末尾没用呀,要链到节点末尾


默认无头结点,无头结点的思路:

三种可能

1. 比较头部

2. 循环比较中间

3. 追加末尾

为何比较头节点:因为循环中间部分的时候没有比较头节点

while (h.next != null) { //比较有序部分


整体代码:

package linkedList;

/**
 * Definition for singly-linked list. 
 * public class ListNode 
 * { 
 *     int val; 
 *     ListNode next;
 *     ListNode(int x) { 
 *           val = x; 
 *           next = null;
 *     } 
 * }
 * @
 */
public class Solution {
	
	public ListNode insertionSortList(ListNode head) {
		if (head == null || head.next == null)
			return head;

		ListNode c = head.next;  //未排序游动指针C
		head.next = null;  
		ListNode pt, h;   //pt:临时节点指针,h:已排序部分游动指针

		while (c != null) {

			pt = c;
			c = c.next;
			pt.next = null;

			if (head.val > pt.val) { //比较头部
				pt.next = head;
				head = pt;
				continue;
			}

			h = head;
			while (h.next != null) { //比较有序部分
				if (h.next.val > pt.val) {
					pt.next = h.next;
					h.next = pt;
					break;
				}

				h = h.next;
			}

			if (h.next == null) { //追加末尾
				h.next = pt;
			}
		}

		return head;
	}
}


分享到:
评论

相关推荐

    【超全!】图解Java数据结构和算法(共195集)【资料+视频+课件+代码+笔记】

    稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、...

    数据结构(C语言版)\Java数据结构和算

    7.2 插入排序 7.3 快速排序 7.4 排序最快有多快 7.5 归并排序 7.6 堆排序 7.7 多关键字排序 7.8 链表排序和索引表排序 7.9 内部排序小结 7.10 外部排序 7.11 参考文献和选读材料 第8章 Hash法 8.1 引言 ...

    leetcode2-DataStructureDemo:数据结构学习。1、啊哈算法

    2、插入排序 3、选择排序 4、归并排序 5、快速排序 6、桶排序、计数排序,基数排序 五、查找算法 1、二分查找 ①求一个数的平方根,精确到小数点后六位。二分查找实现,牛顿迭代法实现。 ②变体1:查找第一个值等于...

    Java数据结构与算法-笔记-代码-课件-资料

    稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、...

    数据结构与算法.xmind

    单向链表 一个节点指向下一个节点 双向链表 一个节点有两个指针域 自由主题 循环链表 能通过任何一个节点找到其他所有的节点,将两种(双向/单向)链表的最后一个结点指向第一个结点...

    java数据分析源码-javaModel:java高级基础知识总结,算法,数据结构,多线程,jvm优化,spring源码分析,java新特性等

    单向链表 1.2 双向链表 1.3 单向环形链表(约瑟夫问题) 2.栈 2.1 数组模拟栈 2.2 实现统合计数器 3.递归 3.1 打印问题 3.2 阶乘 3.3 两个案例:迷宫、八皇后 4.排序算法 4.1 冒泡排序 4.2 选择排序 4.3 插入排序 ...

    韩顺平java源码-DataStructJava:韩顺平JAVA数据结构与算法,重点是算法!

    list下有双向链表、单向循环链表约瑟夫问题、单向链表 queue queue下面有普通的队列(是很浪费空间并且有毛病的)、正常使用的队列 sparseArray sparseArray下面是稀疏数组转换和恢复的例子 stack stack里面是数组栈...

    java 面试题 总结

    通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 8、EJB是基于哪些技术实现的?并说出Session...

    超级有影响力霸气的Java面试题大全文档

    通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 11、EJB是基于哪些技术实现的?并说出...

    程序员面试攻略 part1(共2个)

    3.1 单向链表19 3.1.1 头指针的修改20 3.1.2 遍历21 3.1.3 插入与删除22 3.2 双向链表24 3.3 循环链表24 3.4 面试例题:堆栈的实现25 3.5 面试例题:链表的尾指针31 3.6 面试例题:对RemoveHead函数进行纠错...

    程序员面试攻略part 2(共2个)

    3.1 单向链表19 3.1.1 头指针的修改20 3.1.2 遍历21 3.1.3 插入与删除22 3.2 双向链表24 3.3 循环链表24 3.4 面试例题:堆栈的实现25 3.5 面试例题:链表的尾指针31 3.6 面试例题:对RemoveHead函数进行纠错...

    若干源程序资料12.rar

    2012-06-11 20:57 2,442 单向链表.txt 2012-06-11 21:10 10,962 单片机控制的仓库粮食害虫检测报警系统.rar 2012-06-11 21:44 0 哈希表实例.zip 2012-06-11 21:13 1,001,214 坦克游戏源代码.zip 2012-06-11 21:17 ...

Global site tag (gtag.js) - Google Analytics