给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例 1:
输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]
来源:力扣(LeetCode)
struct ListNode* partition(struct ListNode* head, int x)
{
if(head==NULL)
{
return NULL;
}
struct ListNode* newhead=(struct ListNode*)malloc(sizeof(struct ListNode));//前头节点
assert(newhead!=NULL);
struct ListNode* n=newhead;//前头指针
struct ListNode* back=(struct ListNode*)malloc(sizeof(struct ListNode));//后头结点
assert(back!=NULL);
struct ListNode* b=back;//后头指针
struct ListNode* p=head;
for(;p!=NULL;p=p->next)
{
if(p->val < x)//小的放newhead后面
{
struct ListNode* pnewnode=(struct ListNode*)malloc(sizeof(struct ListNode));
assert(pnewnode!=NULL);
pnewnode->val=p->val;
pnewnode->next=NULL;
n->next=pnewnode;
n=n->next;
}
else//大的放back后面
{
struct ListNode* pnewnode=(struct ListNode*)malloc(sizeof(struct ListNode));
assert(pnewnode!=NULL);
pnewnode->val=p->val;
pnewnode->next=NULL;
b->next=pnewnode;
b=b->next;
}
}
b->next=NULL;
n->next=back->next;//小的大的连起来
return newhead->next;
}