给定一个链表和一个target,把链表分为小于target部分,等于target,大于target三个部分。代码如下:
struct Node
{
int val;
Node *next;
};
Node* Partition(Node* head,int pivot)
{
Node *sH=NULL;//small head
Node *sT=NULL;//small tail
Node *eH=NULL;
Node *eT=NULL;
Node *mH=NULL;
Node *mT=NULL;
while(head!=NULL)
{
Node *next=head->next;
head->next=NULL;
if(head->val<pivot)
{
if(sH==NULL)
{
sH=head;
sT=head;
}
else {
sT->next=head;
sT=head;
}
}
else if(head->val==pivot)
{
if(eH==NULL)
{
eH=head;
eT=head;
}
else{
eT->next=head;
eT=head;
}
}
else
{
if(mH==NULL)
{
mH=head;
mT=head;
}
else{
mT->next=head;
mT=head;
}
}
head=next;
}
if(sT!=NULL)
{
sT->next=eH;
eT=eT==NULL? sT:eT;
}
if(eT!=NULL)
{
eT->next=mH;
}
return sH !=NULL? sH:(eH!=NULL?eH:mH);
}