Programa Javascript para invertir una lista enlazada en grupos de tamaño determinado – Conjunto 2

Dada una lista enlazada, escribe una función para invertir cada k Node (donde k es una entrada a la función). 
Ejemplos:

Input: 1->2->3->4->5->6->7->8->NULL and k = 3 
Output: 3->2->1->6->5->4->8->7->NULL. 

Input: 1->2->3->4->5->6->7->8->NULL and k = 5
Output: 5->4->3->2->1->8->7->6->NULL.

Ya hemos discutido su solución en la publicación a continuación 
Invertir una lista vinculada en grupos de tamaño dado | Conjunto 1
En esta publicación, hemos utilizado una pila que almacenará los Nodes de la lista vinculada dada. En primer lugar, inserte los k elementos de la lista enlazada en la pila. Ahora extraiga los elementos uno por uno y realice un seguimiento del Node previamente extraído. Apunte el puntero siguiente del Node anterior al elemento superior de la pila. Repita este proceso, hasta llegar a NULL.
Este algoritmo usa O(k) espacio adicional.

Javascript

<script>
// Javascript program to reverse a linked list
// in groups of given size
class GfG
{
    // Link list node
    class Node
    {
        constructor()
        {
            this.data = 0;
            this.next = null;
        }
     }
 
    var head = null;
 
    /* Reverses the linked list in groups of
       size k and returns the pointer to the new head node. */
    function Reverse(head, k)
    {
        // Create a stack of Node*
        var mystack = [];
        var current = head;
        var prev = null;
 
        while (current != null)
        {
            // Terminate the loop whichever comes
            // first either current == NULL or
            // count >= k
            var count = 0;
            while (current != null && count < k)
            {
                mystack.push(current);
                current = current.next;
                count++;
            }
 
            // Now pop the elements of stack one
            // by one
            while (mystack.length > 0)
            {
                // If final list has not been
                // started yet.
                if (prev == null)
                {
                    prev = mystack.pop();
                    head = prev;
                     
                }
                else
                {
                    prev.next = mystack.pop();
                    prev = prev.next;
                     
                }
            }
        }
 
        // Next of last element will point
        // to NULL.
        prev.next = null;
 
        return head;
    }
 
    // UTILITY FUNCTIONS
    // Function to push a node
    function push(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;
 
        // Move the head to point to the
        // new node
        head = new_node;
    }
 
    // Function to print linked list
    function printList(node)
    {
        while (node != null)
        {
            document.write(node.data + " ");
            node = node.next;
        }
    }
}
     
// Driver code
     
// Start with the empty list
// Node head = null;
 
/* Created Linked list is
   1->2->3-> 4->5->6->7->8->9 */
push(9);
push(8);
push(7);
push(6);
push(5);
push(4);
push(3);
push(2);
push(1);
 
document.write("Given linked list <br/>");
printList(head);
head = Reverse(head, 3);
document.write("<br/>");
 
document.write("Reversed Linked list <br/>");
printList(head);
// This code contributed by aashish1995
</script>

Producción: 

Given Linked List
1 2 3 4 5 6 7 8 9 
Reversed list
3 2 1 6 5 4 9 8 7

Consulte el artículo completo sobre Invertir una lista vinculada en grupos de tamaño determinado | Set 2 para 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 *