Para probar la oferta de seguridad - la replicación lista compleja

título Descripción

Una lista de entrada compleja (cada nodo tiene un valor de nodo, y dos punteros, uno de puntero al siguiente nodo, un puntero especial a cualquier otro nodo), devuelve un valor después de la cabeza de la replicación lista compleja. (Tenga en cuenta que los resultados de salida no vuelven referencia de nodo de parámetros, de lo contrario el programa volverá preguntas condenados vacíos directamente)

La violencia para resolver:

Primera travesía de principio a fin, un nuevo puntero al azar para la lista vacía. todo lo que se mantuvieron en orden con los dos nodos en la lista dos listas.

Entonces atravesar de principio a fin, de acuerdo con una posición al azar en la lista original de la lista, la lista vinculada a la nueva referencia al azar impartir respectivos nodos.

class Solution:
    # 返回 RandomListNode
    def Clone(self, pHead):
        if not pHead:
            return None
        node = RandomListNode(pHead.label)
        head = node
        pHead_s = pHead
        nodes = [pHead]
        nodes_copy = [node]
        pHead = pHead.next
        
        while pHead:
            node.next = RandomListNode(pHead.label)
            node = node.next
            nodes.append(pHead)
            nodes_copy.append(node)
            pHead = pHead.next
        head_s = head
        while pHead_s:
            if pHead_s.random:
                head_s.random = nodes_copy[nodes.index(pHead_s.random)]
            pHead_s = pHead_s.next
            head_s = head_s.next
        return head

optimización:

La complejidad de tiempo de la violencia de arriba es O (n ^ 2), la complejidad espacial es O (n)

Leer una respuesta en el ganado fuera, la complejidad de tiempo es O (n), la complejidad espacial es O (1)
subtítulo

class Solution:
    def Clone(self, pHead):
        pHead_s = pHead
        while pHead_s:
            temp = pHead_s.next
            pHead_s.next = RandomListNode(pHead_s.label)
            pHead_s.next.next = temp
            pHead_s = pHead_s.next.next
        
        pHead_s = pHead
        while pHead_s:
            if pHead_s.random:
                pHead_s.next.random = pHead_s.random.next
            pHead_s = pHead_s.next.next
        
        pHead_s = pHead
        head_s = pHead_s.next
        head = head_s
        while head_s.next:
            pHead_s.next = pHead_s.next.next
            head_s.next = head_s.next.next
            pHead_s = pHead_s.next
            head_s = head_s.next
        return head

 

Publicado 82 artículos originales · ganado elogios 2 · Vistas 4363

Supongo que te gusta

Origin blog.csdn.net/qq_22498427/article/details/104750364
Recomendado
Clasificación