编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。
解
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if(head == nullptr)
return head;
ListNode* up = NULL;
ListNode* low = NULL;
ListNode* p;
while(head)
{
if(head->val < x)
{
p = head->next;
head->next = low;
low = head;
head = p;
}
else
{
p = head->next;
head->next = up;
up = head;
head = p;
}
}
if(low == NULL)
return up;
p = low;
while(p->next)
p = p->next;
p->next = up;
return low;
}
};