Invertir el intervalo especificado en la lista vinculada

Descripción del Título

Invierta el intervalo entre la posición my la posición n de una lista vinculada. Entre ellos: 1 <= m <= n <= longitud de la lista enlazada

Ejemplo

1 -> 2 -> 3 -> 4 -> 5 -> nulo, m = 2, n = 4

=> 1 -> 4 -> 3 -> 2 -> 5 -> nulo

Solución

  1. Ubíquese en el encabezado de la sección de la lista vinculada que desea revertir y registre
  2. Coloque al final del intervalo de la lista enlazada que desee invertir y registre
  3. Lista enlazada de intervalo inverso
  4. Conexión delantera y trasera

Complejidad del tiempo: O (n)

Complejidad espacial: O (1)

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    
    
    /**
     * 
     * @param head ListNode类 
     * @param m int整型 
     * @param n int整型 
     * @return ListNode类
     */
    public ListNode reverseBetween (ListNode head, int m, int n) {
    
    
        if (head == null || head.next == null) {
    
    
            return head;
        }
        ListNode preNode = null;
        ListNode phead = head;
        for (int i = 1; i < m; i++) {
    
    
            preNode = phead;
            phead = phead.next;
        }
        ListNode ptail = phead;
        for (int i = 0; i < n - m; i++) {
    
    
            ptail = ptail.next;
        }
        ListNode nextNode = ptail.next;
        ptail.next = null;
        if (preNode == null) {
    
    				//特殊情况处理
            head = reverse(phead);
        } else {
    
    
            preNode.next = reverse(phead);
        }
        phead.next = nextNode;
        return head;
    }
    
    public ListNode reverse (ListNode head) {
    
    
        if (head == null || head.next == null) {
    
    
            return head;
        }
        ListNode preNode = head;
        ListNode target = head.next;
        while (target != null) {
    
    
            preNode.next = target.next;
            target.next = head;
            head = target;
            target = preNode.next;
        }
        return head;
    }
}

Supongo que te gusta

Origin blog.csdn.net/weixin_44723496/article/details/113125774
Recomendado
Clasificación