LeetCode 19 - cuenta atrás para borrar la lista de nodos N

Título Descripción
Dada una lista, lista de eliminación el nodo principal devuelve la lista penúltima n nodos y.
Ejemplo:
Dada una lista: 1-> 2-> 3-> 4-> 5, y n = 2.
Después de quitar cuando el nodo penúltima, la lista se convierte en 1-> 2-> 3-> 5.
Descripción:
n dado la garantía de ser válida.
Avanzado:
Usted puede tratar de utilizar un solo paso para lograrlo?

Solución: Los indicadores de velocidad (C ++)

Podemos suponer que el conjunto de la aguja doble p y q, entonces, cuando el número de elementos espaciados entre el final del punto q NULL, p y q es n, luego se retira el siguiente puntero P se completa requisitos.

Aquí Insertar imagen Descripción

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode *dummyhead = new ListNode(0);
        dummyhead->next = head;
        ListNode *p = dummyhead, *q = dummyhead;
        for(int i = 0;i<n+1;i++)
        {
            q = q->next;
        }
        while(q)
        {
            p = p->next;
            q = q->next;
        }
        ListNode *delnode = p->next;
        p->next = delnode->next;
        delete delnode;
        
        return dummyhead->next;
    }
};
Publicados 152 artículos originales · ganado elogios 22 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/qq_38204302/article/details/105050927
Recomendado
Clasificación