876: la lista del nodo intermedio (C ++)

Tema Dirección: https://leetcode-cn.com/problems/middle-of-the-linked-list/

título Descripción

Dado un nodo que tiene la primera  head lista enlazada no vacío individual, devuelve la lista de nodos intermedios. Si hay dos nodos intermedios, se devuelve el segundo nodo intermedio.

Ejemplos de temas

Ejemplo 1:

Entrada: [1,2,3,4,5]
de salida: el nodo 3 (forma SEC: [3,4,5]) en la lista de
nodo devuelto es 3. (Este sistema de evaluación es la expresión de la secuencia de nodo [3,4,5]).
Tenga en cuenta que, volvemos un objeto de tipo NodoLista ANS, de modo que:
. Ans.val 3 =, = ans.next.val 4, ans.next.next.val = 5, y ans.next.next.next = NULL...

Ejemplo 2:

Entrada: [1,2,3,4,5,6]
de salida: este nodo lista 4 (forma SEC: [4,5,6])
Dado que la lista tiene dos nodos intermedios, los valores de 3 y 4, volvemos al segundo nodo.

Ideas de resolución de problemas

Método 1: En primer lugar, la longitud de la lista obtenida recorrer la lista y, a continuación, determinar la posición del punto medio, y el nuevo puntero a pasar a las instalaciones.

Método 2: la solución doble puntero, utilizando el puntero p y q recorrer la lista, nos movemos un paso por p predeterminado, q movió dos pasos, de manera que cuando la cola de la lista enlazada es atravesada q, p es el punto medio puntiagudo ubicación.

código fuente del programa

método 1

/ * * 
 * Definición de la lista simplemente enlazada. 
 * Estructura NodoLista { 
 * int val; 
 * * NodoLista siguiente; 
 * NodoLista (int x): val (x), al lado (NULL) {} 
 *}; 
 * / 
Clase de soluciones {
 público : 
    NodoLista * middleNode (NodoLista * cabeza) {
         si (== cabeza nullptr) vuelta la cabeza;
        int cnt = 0 ; 
        NodoLista * p = cabeza-> siguiente;
        mientras que (! p = nullptr) 
        { 
            cnt ++ ; 
            pag= P-> siguiente; 
        } 
        Si (cnt% 2 == 0 ) 
        { 
            cnt = (cnt + 1 ) / 2 ; 
        } 
        Más 
        { 
            cnt = cnt / 2 + 1 ; 
        } 
        NodoLista * q = cabeza;
        mientras que (CNT =! 0 ) 
        { 
            q = q-> siguiente; 
            CNT - ; 
        } 
        Devolver q; 
    }
};

Método 2: el doble puntero

/ * * 
 * Definición de la lista simplemente enlazada. 
 * Estructura NodoLista { 
 * int val; 
 * * NodoLista siguiente; 
 * NodoLista (int x): val (x), al lado (NULL) {} 
 *}; 
 * / 
Clase de soluciones {
 público : 
    NodoLista * middleNode (NodoLista * cabeza) {
        si (== cabeza nullptr) vuelta la cabeza; 
       NodoLista * p = cabeza; 
       NodoLista * q = cabeza;
       mientras que (q = nullptr && q-> siguiente =! nullptr) 
       { 
           p = p-> siguiente; 
           q= Q-> next-> siguiente; 
       } 
       Devolver p; 

    } 
};

Supongo que te gusta

Origin www.cnblogs.com/wzw0625/p/12549726.html
Recomendado
Clasificación