Programa Javascript para invertir una lista vinculada en grupos de tamaño dado – Conjunto 1

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

Ejemplo: 

Entrada : 1->2->3->4->5->6->7->8->NULL, K = 3 
Salida : 3->2->1->6->5->4- >8->7->NULO 
Entrada : 1->2->3->4->5->6->7->8->NULO, K = 5 
Salida : 5->4->3-> 2->1->8->7->6->NULO 

Algoritmo: inverso (cabeza, k) 

  • Invierta la primera sublista de tamaño k. Mientras retrocede, realice un seguimiento del siguiente Node y del Node anterior. Deje que el puntero al siguiente Node sea next y el puntero al Node anterior sea prev . Consulte esta publicación para invertir una lista vinculada.
  • head->next = reverse(next, k) (Llama recursivamente al resto de la lista y vincula las dos sublistas)
  • Return prev ( prev se convierte en el nuevo encabezado de la lista (ver los diagramas de un método iterativo de esta publicación )

La siguiente imagen muestra cómo funciona la función inversa: 

A continuación se muestra la implementación del enfoque anterior:

Javascript

<script>
// Javascript program to reverse a 
// linked list in groups of
// given size
  
// Head of list
var head; 
  
// Linked list Node 
class Node 
{
    constructor(val) 
    {
        this.data = val;
        this.next = null;
    }
}
  
function reverse(head, k) 
{
    if (head == null)
        return null;
    var current = head;
    var next = null;
    var prev = null;
  
    var count = 0;
  
    // Reverse first k nodes of 
    // linked list 
    while (count < k && 
           current != null) 
    {
        next = current.next;
        current.next = prev;
        prev = current;
            current = next;
            count++;
    }
  
    /* next is now a pointer to (k+1)th node
       Recursively call for the list starting
       from current. And make rest of the list
       as next of first node. */
    if (next != null)
        head.next = reverse(next, k);
  
    // prev is now head of input list
    return prev;
}
  
// Utility functions 
// Inserts a new Node at front 
// of the list. 
function push(new_data) 
{
    /* 1 & 2: Allocate the Node & 
              Put in the data */
    new_node = new Node(new_data);
  
    // 3. Make next of new Node as head 
    new_node.next = head;
  
    // 4. Move the head to point to
    // new Node 
    head = new_node;
}
  
// Function to print linked list
function printList() 
{
    temp = head;
    while (temp != null) 
    {
        document.write(temp.data + " ");
        temp = temp.next;
    }
    document.write("<br/>");
}
  
// Driver code  
/* Create Linked List
1->2->3->4->5->6-> 7->8->8->9->null */
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 = reverse(head, 3);
  
document.write("Reversed list<br/>");
printList();
// This code is contributed by gauravrajput1
</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 

Análisis de Complejidad: 

  • Complejidad temporal: O(n). 
    El recorrido de la lista se realiza solo una vez y tiene ‘n’ elementos.
  • Espacio Auxiliar: O(n/k). 
    Para cada Lista Enlazada de tamaño n, n/k o (n/k)+1 se realizarán llamadas durante la recursividad.

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