Tag:List
Difficulty:Medium
Problem
插入排序链表
给定单个链表的头head,使用 插入排序 对链表进行排序,并返回排序后链表的头。
插入排序算法的步骤:
插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
重复直到所有输入数据插入完为止。
插入排序就是每次拿一个出来,从后往前比,找到合适的位置,插入进去
Solution
插入排序,直接上代码吧
public ListNode insertionSortList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode cur = head.next;
ListNode r = null;
ListNode lastNode = head;
while (cur != null) {
if (cur.val >= lastNode.val) {
lastNode = cur;
cur = cur.next;
} else if (head.val > cur.val) {
r = cur.next;
cur.next = head;
head = cur;
cur = r;
lastNode.next = r;
} else {
r = cur.next;
ListNode pre = head;
ListNode p = head.next;
while (p.val < cur.val) {
pre = p;
p = p.next;
}
cur.next = p;
pre.next = cur;
cur = r;
lastNode.next = r;
}
}
lastNode.next = null;
return head;
}