题目描述:
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5
链接:https://leetcode-cn.com/problems/partition-list/
思路分析:比x节点值大,在右边,比x节点值小,在左边。
- 先开辟两个节点,用于保存左右节点的首节点。
- 遍历链表,然后比较,小的放左边,大的放右边。
例如:
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if(head == nullptr)
return nullptr;
ListNode* min = new ListNode;//小于
ListNode* max = new ListNode;//大于等于
ListNode* p = min;//小于
ListNode* q = max;//大于等于
while(head != nullptr)
{
if(head->val >= x)
{
max->next = head;
max = head;
}
else
{
min->next = head;
min = head;
}
head = head->next;
}
max->next = nullptr;
min->next = q->next;
head = p->next;
delete p;
delete q;
return head;
}
};