# 排序链表
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。
进阶:
	- 你可以在 O(n log n)时间复杂度和常数级空间复杂度下,对链表进行排序吗?
 
示例 1:
 
输入:head = [4,2,1,3]
输出:[1,2,3,4]
示例 2:
 
输入:head = [-1,5,3,4,0]
输出:[-1,0,3,4,5]
示例 3:
输入:head = []
输出:[]
 
提示:
	- 链表中节点的数目在范围 [0, 5 * 104]内
- -105 <= Node.val <= 105
## template
```java
public class ListNode {
	int val;
	ListNode next;
	ListNode(int x) {
		val = x;
	}
}
class Solution {
	public ListNode sortList(ListNode head) {
		if (head == null)
			return head;
		return mergeSort(head);
	}
	public ListNode mergeSort(ListNode head) {
		if (head.next == null)
			return head;
		ListNode p1 = head;
		ListNode p2 = head.next;
		if (p2 != null && p2.next != null) {
			p1 = p1.next;
			p2 = p2.next.next;
		}
		ListNode left = head;
		ListNode right = p1.next;
		p1.next = null;
		left = mergeSort(left);
		right = mergeSort(right);
		return merge(left, right);
	}
	public ListNode merge(ListNode left, ListNode right) {
		ListNode head = null;
		if (left.val < right.val) {
			head = left;
			left = left.next;
		} else {
			head = right;
			right = right.next;
		}
		ListNode tmp = head;
		while (left != null && right != null) {
			if (left.val < right.val) {
				tmp.next = left;
				left = left.next;
			} else {
				tmp.next = right;
				right = right.next;
			}
			tmp = tmp.next;
		}
		tmp.next = left != null ? left : right;
		return head;
	}
}
```
## 答案
```java
```
## 选项
### A
```java
```
### B
```java
```
### C
```java
```