写链表的快排,卡壳了。。。重新梳理下:
// 1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
using namespace std;
struct ListNode
{
int val;
ListNode * next;
ListNode(int x) :val(x), next(NULL) {}
};
void swap(int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}
ListNode * part(ListNode *b, ListNode *e)
{
if (b == e || b->next == e) return b;
int k = b->val;
ListNode *p = b; ListNode *q = b;
while (q != e)
{
if (q->val < k)
{
p = p->next;
swap(&p->val, &q->val);
}
q = q->next;
}
swap(&p->val, &b->val);
return p;
}
void quick_sort(ListNode *b, ListNode *e)
{
if (b == e || b->next == e) return;
ListNode *mid = part(b, e);
quick_sort(b, mid);
quick_sort(mid->next, e);
}
ListNode* sortList(ListNode* head)
{
if (head == NULL || head->next == NULL) re