给定一个链表和一个特定的值x,对链表进行分割,使得所有小于x的节点都在大于或等于x的节点之前,且新的链表应保留两个分区中节点的原始相对位置不变。
示例:
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5
//双链表
//遍历原始链表
//将小的节点放在一个链表中,大于等于的节点放在另外一个节点中
//将两个链表拼接
struct ListNode
{
int val;
ListNode* next;
ListNode(int x):val(x),next(NULL){}
};
class Solution
{
public:
ListNode* partition(ListNode* head,int x)
{
ListNode* before_head=new ListNode(NULL);
ListNode* after_head=new ListNode(NULL);
ListNode* before=before_head;
ListNode* after=after_head;
while(head!=NULL)
{
if(head->val < x)
{
before->next=head;
before=before->next;
}
else
{
after->next=head;
after=after->next;
}
head=head->next;
}
after->next=NULL;
before->next=after_head->next;
return before_head->next;
}
};