Sword Pointer Offer II 024. Lista de enlaces inversos

Tabla de contenido

tren de pensamiento

⭐ Usar recursividad

o(* ̄▽ ̄*) implementación de código


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

pista:

  • El rango del número de nodos en la lista enlazada es [0, 5000]
  • -5000 <= Node.val <= 5000

tren de pensamiento

⭐ Usar recursividad

Recursión (habilidades de programación)_Enciclopedia de Baidu (baidu.com)

  • La técnica de programación en la que un programa se llama a sí mismo se llama recursividad.
  • Un proceso o función tiene un método para llamarse a sí mismo directa o indirectamente en su definición o descripción. Por lo general, convierte un problema grande y complejo capa por capa en un problema de menor escala similar al problema original a resolver. La estrategia recursiva es solo A Se puede usar una pequeña cantidad de programas para describir los múltiples cálculos repetidos necesarios en el proceso de resolución de problemas, lo que reduce en gran medida la cantidad de código en el programa .
  • El poder de la recursión radica en la definición de colecciones infinitas de objetos con declaraciones finitas .
  • En general, la recursión requiere condiciones de contorno, un segmento de avance recursivo y un segmento de retorno recursivo .
  • Cuando no se cumplen las condiciones de contorno, la recursividad avanza; cuando se cumplen las condiciones de contorno, la recursividad regresa.
  • La recursividad es llamarse a sí misma durante el proceso de ejecución.

Condiciones requeridas para formar la recursividad:

  • El subproblema debe ser lo mismo que el problema original, pero más simple;
  • No puede llamarse a sí mismo ilimitadamente, y debe haber una salida, que se simplifica al procesamiento de estado no recursivo.

Los algoritmos recursivos se utilizan generalmente para resolver tres tipos de problemas:

(1) La definición de datos se define recursivamente. ( Función de Fibonacci )

(2) La solución al problema se realiza mediante un algoritmo recursivo .

Aunque este tipo de problema en sí mismo no tiene una estructura recursiva obvia, es más fácil de resolver iterativamente que iterativamente, como el problema de Hanoi.

(3) La forma estructural de los datos se define recursivamente.

Como árbol binario, tabla generalizada, etc., debido a las características recursivas inherentes de la estructura misma, sus operaciones pueden describirse recursivamente.

Desventajas de la recursividad:

En comparación con los algoritmos de uso común, como los bucles ordinarios, los algoritmos recursivos son menos eficientes para resolver problemas. Por lo tanto, la recursión debe evitarse tanto como sea posible, a menos que no haya un algoritmo mejor o una situación específica, cuando la recursión sea más adecuada. En el proceso de llamada recursiva , el sistema abre una pila para almacenar el punto de retorno y la cantidad local de cada capa. Demasiadas recursiones pueden causar fácilmente un desbordamiento de pila y así sucesivamente.

o(* ̄▽ ̄*) implementación de código

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        //判断头节点是不是为空,如果为空,证明传入的链表为空
        //如果head.next == null,说明已经到了链表的最后一个节点
        //注意条件不能写反了
        if(head == null || head.next == null){
            return head;
        }
        //方法自己调用自己
        ListNode new_head = reverseList(head.next);
        head.next.next = head;
        head.next = null;
        return new_head;
    }
}

 

Supongo que te gusta

Origin blog.csdn.net/m0_52982868/article/details/127642943
Recomendado
Clasificación