力扣:147. 对链表进行插入排序
This commit is contained in:
parent
bf4f350a47
commit
1f4206a2a2
@ -0,0 +1,57 @@
|
|||||||
|
package com.code.leet.study.t20210210;
|
||||||
|
|
||||||
|
import com.code.leet.entiy.ListNode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对链表进行插入排序。
|
||||||
|
* <p>
|
||||||
|
* <p>
|
||||||
|
* 插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。
|
||||||
|
* 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。
|
||||||
|
* <p>
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* 插入排序算法:
|
||||||
|
* <p>
|
||||||
|
* 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
|
||||||
|
* 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
|
||||||
|
* 重复直到所有输入数据插入完为止。
|
||||||
|
* <p>
|
||||||
|
* 来源:力扣(LeetCode)
|
||||||
|
* 链接:https://leetcode-cn.com/problems/insertion-sort-list
|
||||||
|
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
|
||||||
|
*/
|
||||||
|
public class InsertionSortList {
|
||||||
|
/**
|
||||||
|
* 147. 对链表进行插入排序
|
||||||
|
*/
|
||||||
|
public ListNode insertionSortList(ListNode head) {
|
||||||
|
if (head == null || head.next == null) {
|
||||||
|
return head;
|
||||||
|
}
|
||||||
|
ListNode current = head.next;
|
||||||
|
head.next = null;
|
||||||
|
while (current != null) {
|
||||||
|
ListNode temp = head;
|
||||||
|
ListNode next = current.next;
|
||||||
|
current.next = null;
|
||||||
|
if (current.val < temp.val) {
|
||||||
|
head = current;
|
||||||
|
head.next = temp;
|
||||||
|
} else {
|
||||||
|
while (temp.next != null) {
|
||||||
|
if (current.val < temp.next.val) {
|
||||||
|
current.next = temp.next;
|
||||||
|
temp.next = current;
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
temp = temp.next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
temp.next = temp.next == null ? current : temp.next;
|
||||||
|
}
|
||||||
|
current = next;
|
||||||
|
}
|
||||||
|
return head;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user