小于于divot的放前边,等于divot的放中间,大于divot的放后边
//划分链表,小于pivot的放前面,等于pivot的放中间,大于pivot的放后边
TreeList* partition_list(TreeList*p, int pivot) {
TreeList* sH = NULL;
TreeList*sT = NULL;
TreeList *eH = NULL;
TreeList* eT = NULL;
TreeList *bH = NULL;
TreeList*bT = NULL;
TreeList* next = NULL;
while (p) {
next = p->next;
p->next = NULL;
if (p->val < pivot) {
if (sH ==NULL) {
sH = p;
sT = p;
}
else {
sT->next = p;
sT = p;
}
}
else if (p->val == pivot) {
if (eH == NULL) {
eH = p;
eT = p;
}
else {
eT->next = p;
eT = p;
}
}
else {
if (bH == NULL) {
bH = p;
bT = p;
}
else {
bT->next = p;
bT = p;
}
}
p = next;
}
if (sH != NULL) {
p = sH;
sT->next = eH;
}
else if (eH != NULL) {
p = eH;
eT->next = bH;
}
else {
p = bH;
}
return p;
}