题解 | #链表分割#
链表分割
https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70
ListNode* partition(ListNode* pHead, int x) {
struct ListNode*lessHead=(struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode*greaterHead=(struct ListNode*)malloc(sizeof(struct ListNode));//定义两个头结点这样就不用考虑尾插第一个元素的特殊情况了
struct ListNode*lesstail=lessHead;
struct ListNode*greatertail=greaterHead;
struct ListNode*cur=pHead;
while(cur)
{
if(cur->val<x)
{
lesstail->next=cur;
lesstail=cur;
cur=cur->next;
}
else
{
greatertail->next=cur;
greatertail=cur;
cur=cur->next;
}
}
greatertail->next=NULL;
lesstail->next=greaterHead->next;
struct ListNode*head=lessHead->next;
free(lessHead);
free(greaterHead);
return head;
}