以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
分析:
- 如果直接对原链表操作,链表会断裂,导致链表连接不完整,所以我们将原链表按大于x和小于等于x,将链表分成两条新链表,结点遍历结束后,再将两条链表连接起来。
过程
C++代码
/*
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 pHead;
}
ListNode* smallhead=new ListNode(0);
ListNode* prev=smallhead;
ListNode* bighead=new ListNode(0);
ListNode* last=bighead;
ListNode* cur=pHead;
while(cur != NULL)
{
if(cur->val<x)
{
prev->next=cur;
prev=prev->next;
}
else
{
last->next=cur;
last=last->next;
}
cur=cur->next;
}
last->next=NULL;
prev->next=bighead->next;
return smallhead->next;
}
};