[preguntas de pincel de leetcode] 206. Lista de enlaces inversos

Dado el nodo principal de la lista enlazada individualmente , invierta la lista enlazada y devuelva la lista enlazada invertida. head 

Ejemplo uno:

Entrada: cabeza = [1,2,3,4,5]

Salida: [5,4,3,2,1]

 Ejemplo dos:

Entrada: cabeza = [1,2]

Salida: [2,1]

Ejemplo tres:

Entrada: cabeza = [ ]

salida: [ ]

insinuación:

  • El número de nodos en la lista enlazada varía de [0, 5000]
  • -5000 <= Node.val <= 5000

Idea uno:

Podemos recorrer la lista enlazada de adelante hacia atrás, usar tres punteros para señalar el nodo actual cur, el nodo predecesor prev, el nodo sucesor curNext y luego señalar el siguiente del nodo actual a prev

Nota: Si no hay curNext, entonces el nodo detrás de cur no se puede encontrar directamente después de modificar cur.next

El proceso intermedio es el siguiente:

 código

class Solution {
    public ListNode reverseList(ListNode head) {
        if (head == null) {      // 空链表直接返回
            return head;       
        }                       
        ListNode prev = null;
        ListNode cur = head;
        ListNode next;
        while (cur != null) {
            next = cur.next;       
            cur.next = prev;
            prev = cur;
            cur = next;       
        }
        return prev;     // 循环结束之后prev指向原链表的最后一个结点,也就是新链表的第一个节点
    }
}

Análisis de Complejidad

Complejidad de tiempo: O(N) atravesando la lista enlazada, N es la longitud de la lista enlazada

Complejidad espacial: O(1)

Idea dos:

recursión

Ir al último nodo de la lista enlazada en el proceso de paso. La restricción recursiva es la condición final de atravesar toda la lista enlazada. En el proceso de retorno, se completa la modificación del siguiente punto.

Código:

class Solution {
    public ListNode reverseList(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode newHead = reverseList(head.next);
        head.next.next = head;
        head.next = null;
        return newHead;
    }
}

Análisis de Complejidad

Complejidad de tiempo: O(N), N es la longitud de la lista enlazada y se realiza una siguiente operación de modificación en cada nodo

Complejidad del espacio: O(N), N es la longitud de la lista enlazada, la complejidad de recurrencia depende principalmente del espacio de pila ocupado por la pila recursiva

Supongo que te gusta

Origin blog.csdn.net/weixin_46531416/article/details/122526111
Recomendado
Clasificación