234. Lista vinculada de paleta (código leet) lista vinculada / inversión de lista vinculada

   

 

Idea: De https://leetcode-cn.com/problems/palindrome-linked-list/solution/zhong-dian-fan-zhuan-dui-bi-by-powcai/

    例: 1-> 2-> 3-> 2-> 1

  1. Use el puntero doble para encontrar el punto medio superior.

    Es decir: encontrar el cuarto nodo 2

  2. Invierta la última mitad de la lista vinculada

    : : 1-> 2-> 3-> 1-> 2

  3. Juzgue si la mitad frontal y posterior de la lista vinculada son iguales, si es impar, independientemente del valor medio

    Eso es juzgar 1, 2 == 1, 2

 

Nota:

  # Método de dos nodos:

  1. La condición para que dos nodos encuentren un nodo intermedio es mientras fast y fast.next, ¿por qué no necesitan fast.next.next? Esto se debe a que para acceder a fast.next.next, es suficiente tener fast.next, porque el nodo tiene un valor predeterminado siguiente: node.next = None

  2. Cuando los nodos impares necesitan slow = slow.next. Los motivos son los siguientes

    1-> 2-> 3-> 2-> 1

  rápido 1 1 1

  lento 1 1 1

 

  # Cuando se invierte la segunda mitad de la lista vinculada:

      1-> 2-> 3-> 2-> 1-> Ninguno

      1-> 2-> 3 Ninguno <- 2 <- 1 <- Ninguno

  3. Tenga en cuenta que después del cambio en el último paso, preNext corresponde a 1 en lugar de la curcur que se da por sentado, luego curNode corresponde a None a la derecha

 

Código:

# Definición de lista individualmente vinculada.
# class ListNode:
# def __init __ (self, x):
# self.val = x
# self.next = Ninguno
Solución de clase:
    def isPalindrome (self, head: ListNode) -> bool:
        rápido = lento = cabeza
        mientras que rápido y rápido.
            fast = fast.next.next
            lento = lento.siguiente
        # Si es impar, tome el límite superior rápido = 5 lento = 3-> lento = 4
        # Si es par, rápido = Ninguno (7) lento = 4 ya es el límite superior
        si es rápido:
            lento = lento.siguiente
        preNext = Ninguno
        curNode = lento
        mientras curNode:
            curNext = curNode.next
            curNode.next = preNext
            preNext = curNode
            curNode = curNext
        mientras preNext y head:
            if preNext.val! = head.val:
                falso retorno
            preNext = preNext.next
            head = head.next
        volver verdadero

 

Supongo que te gusta

Origin www.cnblogs.com/ChevisZhang/p/12721539.html
Recomendado
Clasificación