P182 单链表插入排序
算法 20 阅读
信号摘要
难度:Medium · 时长:08:14 · leetcode 147 · lintcode 173
未对外公开播放权限
点击查看说明
描述
这个题目说的是,给你一个单链表,你要使用插入排序算法对它进行排序。
比如说,给你的链表是:2 -> 0 -> 4 -> 1 -> 8
对这个链表进行排序,得到的链表是:
0 -> 1 -> 2 -> 4 -> 8
代码
public class AlgoCasts {
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
// Time: O(n^2), Space: O(1)
public ListNode insertionSortList(ListNode head) {
ListNode dummy = new ListNode(0), p;
ListNode cur = head, next;
while (cur != null) {
next = cur.next;
p = dummy;
while (p.next != null && cur.val >= p.next.val)
p = p.next;
cur.next = p.next;
p.next = cur;
cur = next;
}
return dummy.next;
}
// Time: O(n^2), Space: O(1)
public ListNode insertionSortListFast(ListNode head) {
ListNode dummy = new ListNode(0), p = dummy;
ListNode cur = head, next;
while (cur != null) {
next = cur.next;
if (p.next != null && cur.val < p.next.val) p = dummy;
while (p.next != null && cur.val >= p.next.val)
p = p.next;
cur.next = p.next;
p.next = cur;
cur = next;
}
return dummy.next;
}
}