Programa Javascript para eliminar N Nodes después de M Nodes de una lista vinculada

Dada una lista enlazada y dos números enteros M y N. Recorra la lista enlazada de modo que retenga M Nodes y luego elimine los siguientes N Nodes, continúe igual hasta el final de la lista enlazada.
Nivel de dificultad: Novato 
Ejemplos:

Input:
M = 2, N = 2
Linked List: 1->2->3->4->5->6->7->8
Output:
Linked List: 1->2->5->6

Input:
M = 3, N = 2
Linked List: 1->2->3->4->5->6->7->8->9->10
Output:
Linked List: 1->2->3->6->7->8

Input:
M = 1, N = 1
Linked List: 1->2->3->4->5->6->7->8->9->10
Output:
Linked List: 1->3->5->7->9

La parte principal del problema es mantener los enlaces adecuados entre los Nodes, asegurarse de que se manejen todos los casos de esquina. A continuación se muestra la implementación en C de la función skipMdeleteN() que omite M Nodes y elimina N Nodes hasta el final de la lista. Se supone que M no puede ser 0.

Javascript

<script>
// Javascript program to delete N nodes
// after M nodes of a linked list
 
// A linked list node
class Node
{
    constructor()
    {
        this.data = 0;
        this.next = null;
    }
}
 
// Function to insert a node at
// the beginning
function push(head_ref, new_data)
{
    // Allocate node
    var new_node = new Node();
 
    // Put in the data
    new_node.data = new_data;
 
    // Link the old list off the
    // new node
    new_node.next = (head_ref);
 
    // Move the head to point to
    // the new node
    (head_ref) = new_node;
 
    return head_ref;
}
 
// Function to print linked list
function printList(head)
{
    var temp = head;
    while (temp != null)
    {
        document.write(temp.data + " ");
        temp = temp.next;
    }
    document.write("<br/>");
}
 
// Function to skip M nodes and then
// delete N nodes of the linked list.
function skipMdeleteN(head, M , N)
{
    var curr = head, t;
    var count;
 
    // The main loop that traverses
    // through the whole list
    while (curr != null)
    {
        // Skip M nodes
        for (count = 1; count < M &&
             curr != null; count++)
            curr = curr.next;
 
        // If we reached end of list,
        // then return
        if (curr == null)
            return;
 
        // Start from next node and delete
        // N nodes
        t = curr.next;
        for (count = 1; count <= N &&
             t != null; count++)
        {
            var temp = t;
            t.next;
        }
 
        // Link the previous list with
        // remaining nodes
        curr.next = t;
 
        // Set current pointer for next
        // iteration
        curr = t;
    }
}
 
// Driver code
/* Create following linked list
   1.2.3.4.5.6.7.8.9.10 */
var head = null;
var M = 2, N = 3;
head = push(head, 10);
head = push(head, 9);
head = push(head, 8);
head = push(head, 7);
head = push(head, 6);
head = push(head, 5);
head = push(head, 4);
head = push(head, 3);
head = push(head, 2);
head = push(head, 1);
 
document.write(
"M = "+M+", N = " + N +
"<br/>Given Linked list is :<br/>");
printList(head);
 
skipMdeleteN(head, M, N);
 
document.write(
"<br/>Linked list after deletion is :<br/>");
printList(head);
// This code is contributed by gauravrajput1
</script>

Producción: 

M = 2, N = 3
Given Linked list is :
1 2 3 4 5 6 7 8 9 10
Linked list after deletion is :
1 2 6 7

Complejidad de tiempo:
O(n) donde n es el número de Nodes en la lista enlazada.

Espacio Auxiliar : O(1)

Consulte el artículo completo sobre Eliminar N Nodes después de M Nodes de una lista vinculada para obtener más detalles.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *