题目描述
编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。
/*struct ListNode
{
int val;
struct ListNode *next;
ListNode(int x):val(x), next(NULL) { }
};*/
class Partition{
public:
ListNode* partition(ListNode* pHead, int x)
{
// write code here
ListNode* min = NULL;
ListNode* max = NULL;
ListNode* lastmin = NULL;
ListNode* lastmax = NULL ;
ListNode* p = pHead ;
while(p)
{
if(p->val<x)
{
if(min == NULL)
{
min = p;
lastmin = min;
p = p->next;
lastmin->next = NULL;
}
else
{
lastmin->next = p;
p = p->next;
lastmin = lastmin->next;
lastmin->next = NULL;
}
}
else
{
if(max == NULL)
{
max = p;
lastmax = max;
p = p->next;
lastmax->next = NULL;
}
else
{
lastmax->next = p;
p = p->next;
lastmax = lastmax->next;
lastmax->next = NULL;
}
}
}
if(lastmin)
{
lastmin->next = max;
return min;
}
return pHead;
}
};