您的位置:首页 > 编程语言 > Java开发

LeetCode | Insertion Sort List

2014-02-07 15:58 459 查看
题目

Sort a linked list using insertion sort.

分析

题目已经明确说了用插入排序,由于是链表,无法像数组那样从后往前依次比较插入,只能从前往后了。

在链表首部添加一个哨兵可以稍微简化下代码。

代码

public class InsertionSortList {
public class ListNode {
int val;
ListNode next;

ListNode(int x) {
val = x;
next = null;
}
}

public ListNode insertionSortList(ListNode head) {
if (head == null || head.next == null) {
return head;
}

// dummy
ListNode dummy = new ListNode(Integer.MIN_VALUE);
dummy.next = head;

ListNode qPre = head;
ListNode q = head.next;
while (q != null) {
ListNode next = q.next;
if (q.val < qPre.val) {
ListNode pPre = dummy;
ListNode p = dummy.next;
while (!p.equals(q)) {
if (q.val < p.val) {
// cut
qPre.next = next;
// paste
q.next = pPre.next;
pPre.next = q;
break;
}
pPre = p;
p = p.next;
}
} else {
qPre = q;
}
q = next;
}

return dummy.next;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息