题目描述
编写代码,以给定值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)
{
if (pHead==NULL)
{
return NULL;
}
ListNode *qHead_=new ListNode(-1);//创建新的头结点;
ListNode *pHead_=new ListNode(-1);
ListNode *qNode=qHead_;
ListNode *pNode=pHead_;
ListNode *cur=pHead;
int tmpVal;
while(cur!=NULL)
{
tmpVal=cur->val;
if (tmpVal>=x)
{
qNode->next=cur;
qNode=cur;
}
else
{
pNode->next=cur;
pNode=cur;
}
cur=cur->next;
}
qNode->next=NULL;
pNode->next=qHead_->next;
return pHead_->next;
}
};