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; } };