Notas de pincel (12) - replicación de lista enlazada compleja

Notas de pincel (12) - replicación de lista enlazada compleja

Descripción del título

Ingrese una lista enlazada compleja (cada nodo tiene un valor de nodo y dos punteros, uno apunta al siguiente nodo y otro puntero especial apunta a cualquier nodo), y el resultado devuelto es el encabezado de la lista enlazada compleja después de la copia. (Nota, no devuelva la referencia de nodo en el parámetro en el resultado de salida, de lo contrario, el programa de juicio volverá directamente vacío)

Idea: Al principio no entendí el significado de la pregunta, pero solo después de leer la estructura dada.

Primero copie cada nodo A->. A * e inserte el nodo copiado A * entre A y B.

La lista vinculada es: A, A *, B, B *, C, C * ...

Modifique el siguiente puntero y el puntero aleatorio, el siguiente puntero de A * apunta al siguiente puntero de next;

Dividir y modificar el siguiente puntero

/*
struct RandomListNode {
    int label;
    struct RandomListNode *next, *random;
    RandomListNode(int x) :
            label(x), next(NULL), random(NULL) {
    }
};
*/
class Solution {
public:
    RandomListNode* Clone(RandomListNode* pHead)
    {
        if(!pHead) return NULL;
        RandomListNode* p=pHead;
        while(p!=NULL)
        {
            RandomListNode *node = new RandomListNode(p->label);
            node->next=p->next;
            p->next=node;
            p=node->next;
        }
        p=pHead;
        while(p!=NULL)
        {
            RandomListNode *node = p->next;
            if(p->random){               
                node->random = p->random->next;
            }
            p = node->next;
            /*if(p->random->next!=NULL)
                p->next->random=p->random->next;
            p=p->next->next;*/
        }
        p=pHead;
        RandomListNode* q=p->next;
        RandomListNode *tmp;
        while(p->next!=NULL)
        {
            tmp = p->next;
            p->next =tmp->next;
            p = tmp;
        }
        return q;
    }
};

 

Publicado 36 artículos originales · 19 alabanzas · 20,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/GJ_007/article/details/105466177
Recomendado
Clasificación