分隔链表(中等)
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
struct ListNode
{int val;ListNode *next;ListNode(int x): val(x), next(nullptr) {}
};
class Solution
{
public:ListNode* partition(ListNode *head, int x){if(!head) return nullptr;ListNode *smaller_head = new ListNode(-2);ListNode *smaller = smaller_head;ListNode *larger_head = new ListNode(-1);ListNode *larger = larger_head;while(head){if(head->val < x){smaller->next = head;smaller = smaller->next;}else{larger->next = head;larger = larger->next;}head = head->next;}larger->next = nullptr;smaller->next = larger_head->next;ListNode *ret = smaller_head->next;delete larger_head;delete smaller_head;return ret;}
};