目录
一、题目
二、代码
重新定义两个链表
将小于x的元素放入一个链表,将大于等于x的元素放入另外一个链表,然后合并两个链表
ListNode* partition(ListNode* head, int x) {
if (head == nullptr)
return nullptr;
if (head->next == nullptr)
return head;
ListNode* p1 = (ListNode*)malloc(sizeof(ListNode));
if (p1 == nullptr)
return nullptr;
ListNode* pp1 = p1;
ListNode* p2 = (ListNode*)malloc(sizeof(ListNode));
if (p2 == nullptr)
return nullptr;
ListNode* pp2 = p2;
ListNode* s = head;
while (s != nullptr)
{
if (s->val < x)
{
ListNode* tmp = (ListNode*)malloc(sizeof(ListNode));
if (tmp == nullptr)
return nullptr;
tmp->val = s->val;
tmp->next = nullptr;
p1->next = tmp;
p1 = p1->next;
}
else {
ListNode* tmp = (ListNode*)malloc(sizeof(ListNode));
if (tmp == nullptr)
return nullptr;
tmp->val = s->val;
tmp->next = nullptr;
p2->next = tmp;
p2 = p2->next;
}
s = s->next;
}
p2->next = nullptr;
p1->next = pp2->next;
return pp1->next;
}