Pregunta de lista enlazada clásica de Niuke— (NC78) Lista enlazada inversa

Factor de dificultad completo * * * * *, el factor de dificultad de esta pregunta * *.
Entusiasmo frecuente por los exámenes completos, entusiasmo * * * * *por esta pregunta * * * * *.

1. Descripción del título

Inserte la descripción de la imagen aquí

2. Enlace de tema

  1. Lista de enlaces inversos

3. Análisis de problemas

  1. Invierta la lista vinculada dada y muestre el encabezado de la nueva lista vinculada.
  2. La complejidad del tiempo es O (n). Recorra un lado de la lista vinculada desde el principio sin repetir el recorrido del bucle.
  3. La complejidad del espacio es O (1). No abra nuevos nodos de listas vinculadas. Realice in situ.

3.1 Icono de análisis

Inserte la descripción de la imagen aquí

3.2 Explicación detallada de los iconos

  1. El nodo está inicialmente vacío, por lo que el siguiente después de que head (cur) se invierte apunta a vacío.
  2. cur es inicialmente la cabeza.
  3. El siguiente es el siguiente de cur, y el siguiente nodo aparece primero cada vez para 记录cur的nextgarantizar la continuación de la iteración.

Código de núcleo iterativo: (proceso como se muestra arriba)

		Node = Cur;
        Cur = Next;
        Next = Cur->next;
        Cur -> next = Node;

4. Código de resolución de problemas

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

/**
 1. 
 2. @param pHead ListNode类 
 3. @return ListNode类
 */
typedef struct ListNode ListNode;
struct ListNode* ReverseList(struct ListNode* pHead ) {
    
    
    if(pHead == NULL) //注释1
    {
    
    
        return NULL;
    }
    
    //注释二
    ListNode* Node = NULL;
    ListNode* Cur = pHead;
    ListNode* Next = Cur->next;
    
    Cur->next = Node;
	
	//注释3
    while(Next)
    {
    
    
        Node = Cur;
        Cur = Next;
        Next = Cur->next;
        Cur -> next = Node;
    }
    
    return Cur;
}

5. Explicación detallada de los comentarios del código

  1. Nota 1: El puntero de la cabeza se anula primero. Para no Next = Cur->nextprovocar un acceso de puntero nulo de vez en cuando.
  2. Nota 2: Primero procese el encabezado de la iteración. De cada nodo 初始相对位置进行归位.
  3. Nota 3: Para lograr la iteración, el proceso es como se muestra en la figura anterior. Cuando Next为空时,链表访问完毕. El nuevo nodo principal es cur y se devuelve el nuevo nodo principal después de la inversión.

1.如有错误或者没能理解的地方,请及时评论或者私信,及时修改更新.
2.会持续更新相关链表高频题目,分类专栏—数据结构.

Supongo que te gusta

Origin blog.csdn.net/weixin_45313447/article/details/115249141
Recomendado
Clasificación