leetcode 147. 链表上的插入排序
最编程
2024-07-16 16:07:14
...
这个题目需要我们使用插入排序去解决链表的排序。
思路:使用dummyHead(人造链表头)进行插入排序。
首先我们使用两个指针,一个last和一个cur进行标记,比较他们两的大小。
如果说(1)last.val <= cur.val 那么我们不需要进行排序,继续向后移动。
(2)last.val > cur.val 此时需要将cur向前进行插入,那么我们需要寻找插入的位置。
因为last及其之前的节点都已经是有序的了,那么我们就从dummyHead向后寻找那个位置,即pre(初始为dummyHead,逐渐向后寻找).next.val <= cur.val
寻找到这个位置后,我们就可以进行一番操作。
last.next = cur.next;
cur.next = pre.next;
pre.next = cur;
最后cur = last.next;
代码:
public static ListNode insertionSortList(ListNode head) {
if(head == null) return head;
ListNode dummyHead = new ListNode(0);
dummyHead.next = head;
ListNode last = head;
ListNode cur = head.next;
while(cur != null){
if(last.val <= cur.val){
last = last.next;
}else {
ListNode pre = dummyHead;
while(pre.next.val <= cur.val) pre = pre.next;
last.next = cur.next;
cur.next = pre.next;
pre.next = cur;
}
cur = last.next;
}
return dummyHead.next;
}
上一篇: java 异步接口实现 runnable
下一篇: java 异步使用
推荐阅读
-
leetcode 147. 链表上的插入排序
-
Golang | Leetcode Golang题解之第138题随机链表的复制-题解:
-
【考研数据结构——C语言描述】第二章 线性表链式存储结构上的基本操作——单链表的建立
-
LeetCode - #19 删除链表最后一个节点的第 N 个节点。
-
LeetCode - 82.删除排序链表 II 中的重复元素
-
用简单易懂的方式解析单链表上的冒泡、快排、选择、插入和归并五种排序算法,配合详细图解与代码示例
-
用C++实现LeetCode第147题:链表的插入排序操作
-
最少的魔法豆数量在 LeetCode 上的求解方法(使用 C++ 和 Java 的排序和前后缀技巧)
-
通过LeetCode上的5道题目入门——动态规划——算法!