86. Partición Lista **
https://leetcode.com/problems/partition-list/
título Descripción
Dada una lista enlazada y un valor x, partición que de tal manera que todos los nodos menos de x vienen antes nodos mayor que o igual a x
.
Usted debe preservar el orden relativo original de los nodos en cada una de las dos particiones.
Ejemplo:
Input: head = 1->4->3->2->5->2, x = 3
Output: 1->2->2->4->3->5
Implementación en C ++ 1
Se utiliza smaller
para vincular más pequeño que el x
nodo con la larger
vinculación de mayor / igual x
Tenga en cuenta el último nodo.:
q->next = nullptr; // 防止指针指向混乱的问题
p->next = larger->next; // 小于 x 的节点在前面
Aquí está el código completo:
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if (!head) return nullptr;
ListNode *smaller = new ListNode(0), *larger = new ListNode(0);
auto p = smaller, q = larger;
while (head) {
if (head->val < x) {
p->next = head;
p = p->next;
} else {
q->next = head;
q = q->next;
}
head = head->next;
}
q->next = nullptr;
p->next = larger->next;
return smaller->next;
}
};