86. Partición Lista **

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 smallerpara vincular más pequeño que el xnodo con la largervinculación de mayor / igual xTenga 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;
    }
};
Publicados 455 artículos originales · ganado elogios 8 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/Eric_1993/article/details/104978666
Recomendado
Clasificación