思路:
可以先将链表分隔成两个链表,一个链表为小于x的链表,一个链表为大于等于x的链表,然后将他们合并起来,就完成本题。
(1)设置两个哨兵节点dummy1和dummy2分别来链接小于x的链表和大于等于x的链表。
(2)遍历原链表,将小的放在dummy1后,将大的放在dummy2后。
(3)分隔完成之后,将cur1->next=dummy2->next,完成链接,最后要将cur2->next=NULL避免成环。
代码为
struct ListNode* partition(struct ListNode* head, int x){
if(head==NULL)
return NULL;
struct ListNode* dummy1=(struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* dummy2=(struct ListNode*)malloc(sizeof(struct ListNode));
dummy1->next=dummy2->next=NULL;
struct ListNode* cur1=dummy1;
struct ListNode* cur2=dummy2;
struct ListNode* cur=head;
while(cur)
{
if(cur->val<x)
{
cur1->next=cur;
cur1=cur1->next;
}
else{
cur2->next=cur;
cur2=cur2->next;
}
cur=cur->next;
}
cur1->next=dummy2->next;
cur2->next=NULL;
struct ListNode *newnode=dummy1->next;
free(dummy1);
free(dummy2);
return newnode;
}