# 对链表进行插入排序

<p>对链表进行插入排序。</p>

<p><img alt="" src="https://img-service.csdnimg.cn/img_convert/9400029b6559a5f16c48610324ceb961.png"><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>


## template

```java
public class ListNode {
	int val;
	ListNode next;

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


class Solution {
	public ListNode insertionSortList(ListNode head) {
		if (head == null)
			return head;
		ListNode res = new ListNode(head.val);
		ListNode left = head.next;
		while ((left != null)) {
			ListNode cur = left;
			left = left.next;

			if (cur.val <= res.val) {
				cur.next = res;
				res = cur;
				continue;
			}

			ListNode p = res;
			ListNode last = p;
			while (p != null && p.val < cur.val) {
				last = p;
				p = p.next;
			}
			last.next = cur;
			last.next.next = p;
		}
		return res;
	}
}
```

## 答案

```java

```

## 选项

### A

```java

```

### B

```java

```

### C

```java

```