方法一
第一个方法,我们可以在原链表上进行更改,当我们遇到大于等于x的数的时候,我们可以将该节点尾插到原链表中。若节点小于x则不做改动,继续向后比较。
方法二
我们可以新建一个链表,遍历原链表,若节点大于等于x则在新链表中尾插,若节点小于x则在新链表中头插。
方法三
我们可以创建两个链表,大链表和小链表,大链表用来存储大于等于x的节点,小链表用来存储小于x的节点,最后再将两个节点连接在一起。
typedef struct ListNode ListNode;
struct ListNode* partition(struct ListNode* head, int x)
{
//创建两个空链表
ListNode*lessHead,*lessTail;
ListNode*greaterHead,*greaterTail;
lessHead=lessTail=(ListNode*)malloc(sizeof(ListNode));
greaterHead=greaterTail=(ListNode*)malloc(sizeof(ListNode));
ListNode*pcur=head;
while(pcur)
{
if(pcur->val>=x)
{
greaterTail->next=pcur;
greaterTail=greaterTail->next;
}
else
{
lessTail->next=pcur;
lessTail=lessTail->next;
}
pcur=pcur->next;
}
greaterTail->next=NULL;
lessTail->next=greaterHead->next;
ListNode*node=lessHead->next;
free(lessHead);
free(greaterHead);
lessHead=greaterHead=NULL;
return node;
}
大家感兴趣的可以自行尝试哦