方法一:插入排序
class Solution {
public ListNode sortList(ListNode head) {
ListNode result = new ListNode(0), p = head, pre, q; // 默认 result.next = null;
while(p != null){
q = p.next;
pre = result;
while( pre.next != null && pre.next.val < p.val)
pre = pre.next;
p.next = pre.next;
pre.next = p;
p = q;
}
return result.next;
}
}
方法二:选择排序
class Solution {
public ListNode sortList(ListNode head) {
ListNode p = head, q;
while(p != null){
q = p.next;
while(q != null){
if(p.val > q.val){
int temp = p.val;
p.val = q.val;
q.val = temp;
}
q = q.next;
}
p = p.next;
}
return head;
}
}
方法三:归并排序
public ListNode sortList(ListNode head) {
return head == null ? null : mergeSort(head);
}
private ListNode mergeSort(ListNode head) {
if (head.next == null) return head;
ListNode p = head, q = head, pre = null;
while (q != null && q.next != null) {
pre = p;
p = p.next;
q = q.next.next;
}
pre.next = null;
ListNode l = mergeSort(head);
ListNode r = mergeSort(p);
return merge(l, r);
}
ListNode merge(ListNode l, ListNode r) {
ListNode dummyHead = new ListNode(0);
ListNode cur = dummyHead;
while (l != null && r != null) {
if (l.val <= r.val) {
cur.next = l;
cur = cur.next;
l = l.next;
} else {
cur.next = r;
cur = cur.next;
r = r.next;
}
}
if (l != null) cur.next = l;
if (r != null) cur.next = r;
return dummyHead.next;
}
}