游动指针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 public class ListNode { int val; // 节点值 ...
本文将深入探讨Java中链表的操作实例,旨在帮助开发者更好地理解和运用链表来解决实际问题。 首先,我们需要理解链表的基本概念。链表不同于数组,它不连续存储元素,每个元素(称为节点)包含数据以及指向下一个...
例如,创建一个单向链表节点的Java类可以这样实现: ```java public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } ``` 冒泡排序是一种简单的排序算法,它重复地遍历待排序的列表...
排序可以使用插入排序或归并排序,平均分可以通过遍历链表累加所有分数后除以学生数量得到。 总的来说,刘小晶教授的例2.7通过一个实际的应用场景,让我们直观地理解了链表数据结构在处理动态数据集合时的优势,...
- 排序:链表可以使用各种排序算法进行排序,如插入排序、归并排序等。 6. **链表与数组的比较**: 链表在空间上比数组更灵活,可以动态调整大小,而数组一旦创建大小固定。链表的插入和删除操作更快,但访问速度...
链表的主要类型有单向链表、双向链表和循环链表。 1. 单向链表:每个节点只有一个指向前一个节点的指针,最后一个节点的指针为null。操作包括插入、删除、遍历等。 2. 双向链表:每个节点有两个指针,分别指向前一...
链表的主要类型有单向链表、双向链表和循环链表。在Java中,可以使用类来表示链表节点,每个节点包含数据和指向下一个节点的引用。 2. **栈**:栈是一种后进先出(LIFO)的数据结构,常用于函数调用、表达式求值等...
例如,栈可以使用单向链表实现,通过在链表头部进行插入和删除操作;队列则可以使用双端链表,允许在两端进行入队和出队操作。 链表的性能特点需要注意,由于元素不是连续存储,随机访问(如通过索引访问)效率较低...
- **单向链表**:本文所讨论的链表类型,其中每个节点仅指向其后继节点。 - **节点**:链表的基本单位,通常包含一个数据字段和一个指向下一个节点的链接。 #### 解决方案详解 为了解决问题,我们首先需要定义链表...
单向链表只能按一个方向遍历,双向链表可以从两个方向遍历,循环链表的最后一个节点指向第一个节点,形成环状。 2. **链表的常见操作** - 插入:在链表头部、尾部或指定位置插入新节点。 - 删除:根据节点值或...
8. **链表的排序**:链表可以使用各种排序算法进行排序,如冒泡排序、插入排序、归并排序等,但链表的特性使得一些算法更高效,如归并排序。 9. **链表的复制**:创建链表的副本,需要遍历原链表并为每个节点创建新...
1. 单向链表的创建:如何初始化链表,以及如何创建新节点并将其插入到链表中。 2. 遍历链表:如何从头节点开始,按顺序访问每个节点,直到到达尾节点。 3. 插入操作:在链表的特定位置或头部、尾部插入新节点的代码...
链表有多种类型,其中最常见的是单向链表和双向链表。单向链表中的每个节点只有一个指针,通常指向下一个节点;双向链表则更复杂,每个节点有两个指针,分别指向前一个节点和后一个节点。双向链表的优势在于可以更...
稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、...
Java的`java.util.LinkedList`类实现的就是单向链表。在单向链表中,插入和删除操作通常比数组更高效,因为它们只需要改变相邻节点的引用,而不需要移动元素。 2. 双向链表:双向链表的每个节点有两个指针,一个...
链表分为单向链表和双向链表,单向链表只能从前往后遍历,而双向链表可以向前或向后遍历。 实验内容可能包括以下部分: 1. **链表的创建**:首先,我们需要创建一个链表结构,这通常涉及到定义节点类,包括数据和...
首先,我们来看看链表的两种主要类型:单向链表和双向链表。 1. 单向链表:每个节点只有一个指向下一个节点的指针。这种链表只能按照一个方向(通常是向前)遍历,插入和删除操作相对简单,但无法向后移动。 2. ...
链表分为单向链表、双向链表和循环链表。单向链表只能向前遍历,而双向链表支持前向和后向遍历。链表的主要操作包括插入、删除和遍历。 2. **队列**:队列是一种先进先出(FIFO)的数据结构,类似于现实生活中的...
7.2 插入排序 7.3 快速排序 7.4 排序最快有多快 7.5 归并排序 7.6 堆排序 7.7 多关键字排序 7.8 链表排序和索引表排序 7.9 内部排序小结 7.10 外部排序 7.11 参考文献和选读材料 第8章 Hash法 8.1 引言 ...
实验的核心内容很可能是基于C++或Java等编程语言实现常见的数据结构,如线性表、栈、队列、链表、树、图以及散列表等。线性表是最基本的数据结构,可以用来存储有序或无序的数据序列。栈是一种后进先出(LIFO)的...