原理都很简单,关键是某些边界能否正确写对:
Node *quicksort(Node *head, Node* tail) {
Node d1(0), d2(0), *cur = head, *c1 = &d1, *c2 = &d2, *pivot = head;
if (head == NULL || head == tail || head->next == tail)
return head;
for (cur = cur->next; cur != tail; cur = cur->next) {
if (pivot->val > cur->val) {
c1->next = cur;
c1 = c1->next;
}
else {
c2->next = cur;
c2 = c2->next;
}
}
c1->next = pivot, pivot->next = d2.next, c2->next = tail;
d1.next = quicksort(d1.next, pivot);
d2.next = quicksort(d2.next, tail);
pivot->next = d2.next;
return d1.next;
}