diff --git a/src/main/java/leetcode/editor/cn/InsertionSortList.java b/src/main/java/leetcode/editor/cn/InsertionSortList.java new file mode 100644 index 0000000..8d9f425 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/InsertionSortList.java @@ -0,0 +1,88 @@ +//对链表进行插入排序。 +// +// +//插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。 +//每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。 +// +// +// +// 插入排序算法: +// +// +// 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 +// 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。 +// 重复直到所有输入数据插入完为止。 +// +// +// +// +// 示例 1: +// +// 输入: 4->2->1->3 +//输出: 1->2->3->4 +// +// +// 示例 2: +// +// 输入: -1->5->3->4->0 +//输出: -1->0->3->4->5 +// +// Related Topics 排序 链表 +// 👍 396 👎 0 + +package leetcode.editor.cn; + +import com.code.leet.entiy.ListNode; + +//147:对链表进行插入排序 +public class InsertionSortList{ + public static void main(String[] args) { + //测试代码 + Solution solution = new InsertionSortList().new Solution(); + } + //力扣代码 + //leetcode submit region begin(Prohibit modification and deletion) +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + 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; + } +} +//leetcode submit region end(Prohibit modification and deletion) + +} \ No newline at end of file diff --git a/src/main/java/leetcode/editor/cn/InsertionSortList.md b/src/main/java/leetcode/editor/cn/InsertionSortList.md new file mode 100644 index 0000000..a1b59de --- /dev/null +++ b/src/main/java/leetcode/editor/cn/InsertionSortList.md @@ -0,0 +1,30 @@ +
对链表进行插入排序。
+ +
+插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。
+每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。
+ +
插入排序算法:
+ ++ +
示例 1:
+ +输入: 4->2->1->3 +输出: 1->2->3->4 ++ +
示例 2:
+ +输入: -1->5->3->4->0 +输出: -1->0->3->4->5 ++