147:对链表进行插入排序

This commit is contained in:
huangge1199 2021-06-07 10:37:52 +08:00
parent a6ff230d58
commit 3ce3e2ab3f
2 changed files with 118 additions and 0 deletions

View File

@ -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)
}

View File

@ -0,0 +1,30 @@
<p>对链表进行插入排序。</p>
<p><img alt="" src="https://upload.wikimedia.org/wikipedia/commons/0/0f/Insertion-sort-example-300px.gif"><br>
<small>插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。<br>
每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。</small></p>
<p>&nbsp;</p>
<p><strong>插入排序算法:</strong></p>
<ol>
<li>插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。</li>
<li>每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。</li>
<li>重复直到所有输入数据插入完为止。</li>
</ol>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong> 4-&gt;2-&gt;1-&gt;3
<strong>输出:</strong> 1-&gt;2-&gt;3-&gt;4
</pre>
<p><strong>示例&nbsp;2</strong></p>
<pre><strong>输入:</strong> -1-&gt;5-&gt;3-&gt;4-&gt;0
<strong>输出:</strong> -1-&gt;0-&gt;3-&gt;4-&gt;5
</pre>
<div><div>Related Topics</div><div><li>排序</li><li>链表</li></div></div>\n<div><li>👍 396</li><li>👎 0</li></div>