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

单向链表插入排序 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链表反转及排序

    在“java链表反转及排序”这个主题中,我们将探讨如何在Java中实现单向链表的反转和排序。首先,我们创建一个链表节点类,包含数据和指向下一个节点的引用: ```java public class ListNode { int val; // 节点值 ...

    Java算法(链表操作实例)

    本文将深入探讨Java中链表的操作实例,旨在帮助开发者更好地理解和运用链表来解决实际问题。 首先,我们需要理解链表的基本概念。链表不同于数组,它不连续存储元素,每个元素(称为节点)包含数据以及指向下一个...

    链表和冒泡排序

    例如,创建一个单向链表节点的Java类可以这样实现: ```java public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } ``` 冒泡排序是一种简单的排序算法,它重复地遍历待排序的列表...

    数据结构—刘小晶—例2.7-用链表结构写的学生成绩管理系统

    排序可以使用插入排序或归并排序,平均分可以通过遍历链表累加所有分数后除以学生数量得到。 总的来说,刘小晶教授的例2.7通过一个实际的应用场景,让我们直观地理解了链表数据结构在处理动态数据集合时的优势,...

    LinkedList:该项目提供了单向、双向和循环链表的示例

    - 排序:链表可以使用各种排序算法进行排序,如插入排序、归并排序等。 6. **链表与数组的比较**: 链表在空间上比数组更灵活,可以动态调整大小,而数组一旦创建大小固定。链表的插入和删除操作更快,但访问速度...

    山东大学大一高程JAVA链表例题.zip

    链表的主要类型有单向链表、双向链表和循环链表。 1. 单向链表:每个节点只有一个指向前一个节点的指针,最后一个节点的指针为null。操作包括插入、删除、遍历等。 2. 双向链表:每个节点有两个指针,分别指向前一...

    常用数据结构及其算法的Java实现,包括但不仅限于链表、栈,队列,树,堆,图等经典数据结构及其他经典基础算法(如排序.zip

    链表的主要类型有单向链表、双向链表和循环链表。在Java中,可以使用类来表示链表节点,每个节点包含数据和指向下一个节点的引用。 2. **栈**:栈是一种后进先出(LIFO)的数据结构,常用于函数调用、表达式求值等...

    能直接用的链表

    例如,栈可以使用单向链表实现,通过在链表头部进行插入和删除操作;队列则可以使用双端链表,允许在两端进行入队和出队操作。 链表的性能特点需要注意,由于元素不是连续存储,随机访问(如通过索引访问)效率较低...

    删除排序链表中的重复元素(java代码).docx

    - **单向链表**:本文所讨论的链表类型,其中每个节点仅指向其后继节点。 - **节点**:链表的基本单位,通常包含一个数据字段和一个指向下一个节点的链接。 #### 解决方案详解 为了解决问题,我们首先需要定义链表...

    leetcode-链表笔记

    单向链表只能按一个方向遍历,双向链表可以从两个方向遍历,循环链表的最后一个节点指向第一个节点,形成环状。 2. **链表的常见操作** - 插入:在链表头部、尾部或指定位置插入新节点。 - 删除:根据节点值或...

    1_12313212313链表.7z

    8. **链表的排序**:链表可以使用各种排序算法进行排序,如冒泡排序、插入排序、归并排序等,但链表的特性使得一些算法更高效,如归并排序。 9. **链表的复制**:创建链表的副本,需要遍历原链表并为每个节点创建新...

    数据结构与算法-顺序表(链表篇)

    1. 单向链表的创建:如何初始化链表,以及如何创建新节点并将其插入到链表中。 2. 遍历链表:如何从头节点开始,按顺序访问每个节点,直到到达尾节点。 3. 插入操作:在链表的特定位置或头部、尾部插入新节点的代码...

    链表(实验报告,指导书,源程序)

    链表有多种类型,其中最常见的是单向链表和双向链表。单向链表中的每个节点只有一个指针,通常指向下一个节点;双向链表则更复杂,每个节点有两个指针,分别指向前一个节点和后一个节点。双向链表的优势在于可以更...

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

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

    mylinktest

    Java的`java.util.LinkedList`类实现的就是单向链表。在单向链表中,插入和删除操作通常比数组更高效,因为它们只需要改变相邻节点的引用,而不需要移动元素。 2. 双向链表:双向链表的每个节点有两个指针,一个...

    实验一链表及其应用.zip

    链表分为单向链表和双向链表,单向链表只能从前往后遍历,而双向链表可以向前或向后遍历。 实验内容可能包括以下部分: 1. **链表的创建**:首先,我们需要创建一个链表结构,这通常涉及到定义节点类,包括数据和...

    链表

    首先,我们来看看链表的两种主要类型:单向链表和双向链表。 1. 单向链表:每个节点只有一个指向下一个节点的指针。这种链表只能按照一个方向(通常是向前)遍历,插入和删除操作相对简单,但无法向后移动。 2. ...

    链表、队列、栈、二叉树、哈希表等

    链表分为单向链表、双向链表和循环链表。单向链表只能向前遍历,而双向链表支持前向和后向遍历。链表的主要操作包括插入、删除和遍历。 2. **队列**:队列是一种先进先出(FIFO)的数据结构,类似于现实生活中的...

    数据结构(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 引言 ...

    数据结构实验1_数据结构实验1_数据结构实验_

    实验的核心内容很可能是基于C++或Java等编程语言实现常见的数据结构,如线性表、栈、队列、链表、树、图以及散列表等。线性表是最基本的数据结构,可以用来存储有序或无序的数据序列。栈是一种后进先出(LIFO)的...

Global site tag (gtag.js) - Google Analytics