Programa Javascript para ordenar una lista enlazada de 0, 1 y 2 cambiando los enlaces

Dada una lista enlazada de 0, 1 y 2, ordénela.
Ejemplos:

Input: 2->1->2->1->1->2->0->1->0
Output: 0->0->1->1->1->1->2->2->2
The sorted Array is 0, 0, 1, 1, 1, 1, 2, 2, 2.

Input: 2->1->0
Output: 0->1->2
The sorted Array is 0, 1, 2

Método 1: hay una solución discutida en la publicación a continuación que funciona cambiando los datos de los Nodes. 
Ordenar una lista enlazada de 0, 1 y 2
La solución anterior no funciona cuando estos valores tienen datos asociados con ellos. 
Por ejemplo, estos tres representan tres colores y diferentes tipos de objetos asociados con los colores y clasifican los objetos (conectados con una lista vinculada) en función de los colores.

Método 2: en esta publicación, se analiza una nueva solución que funciona cambiando los enlaces.
Enfoque: Iterar a través de la lista enlazada. Mantenga 3 punteros llamados cero, uno y dos para apuntar a los Nodes finales actuales de las listas vinculadas que contienen 0, 1 y 2 respectivamente. Para cada Node recorrido, lo adjuntamos al final de su lista correspondiente. Finalmente, vinculamos las tres listas. Para evitar muchas verificaciones nulas, usamos tres punteros ficticios zeroD, oneD y twoD que funcionan como encabezados ficticios de tres listas.

Javascript

<script>
  
// JavaScript Program to sort a
// linked list 0s, 1s 
// or 2s by changing links 
class Node 
{
    constructor(val) 
    {
        this.data = val;
        this.next = null;
    }
}
  
// Sort a linked list of 0s, 1s 
// and 2s by changing pointers.
function sortList(head) 
{
    if (head == null || 
        head.next == null) 
    {
        return head;
    }
      
    // Create three dummy nodes to point 
    // to beginning of three linked lists. 
    // These dummy nodes are created to 
    // a function many null checks.
    var zeroD = new Node(0);
    var oneD = new Node(0);
    var twoD = new Node(0);
  
    // Initialize current pointers for 
    // three lists and whole list.
    var zero = zeroD, one = oneD, 
        two = twoD;
          
    // Traverse list
    var curr = head;
    while (curr != null) 
    {
        if (curr.data == 0) 
        {
            zero.next = curr;
            zero = zero.next;
            curr = curr.next;
        }
        else if (curr.data == 1) 
        {
            one.next = curr;
            one = one.next;
            curr = curr.next;
        } 
        else 
        {
            two.next = curr;
            two = two.next;
            curr = curr.next;
        }
    }
    // Attach three lists
    zero.next = (oneD.next != null) ? 
                (oneD.next) : (twoD.next);
    one.next = twoD.next;
    two.next = null;
          
    // Updated head
    head = zeroD.next;
    return head;
}
  
// Function to create and return 
// a node
function newNode(data) 
{
    // Allocating space
    var newNode = new Node(data);
    newNode.next = null;
    return newNode;
}
  
// Function to print linked list 
function printList(node) 
{
    while (node != null) 
    {
        document.write(node.data + " ");
        node = node.next;
    }
}
  
var head = new Node(1); 
head.next = new Node(2); 
head.next.next = new Node(0); 
head.next.next.next = new Node(1);
document.write(
"Linked List Before Sorting<br/>");
printList(head); 
head = sortList(head);  
document.write(
"<br/>Linked List After Sorting<br/>");
printList(head); 
// This code is contributed by gauravrajput1 
</script>

Producción : 

Linked List Before Sorting
1  2  0  1  
Linked List After Sorting
0  1  1  2  

Análisis de Complejidad: 

  • Complejidad de tiempo: O(n) donde n es un número de Nodes en la lista enlazada. 
    Solo se necesita un recorrido de la lista enlazada.
  • Espacio Auxiliar: O(1). 
    Como no se requiere espacio adicional.

Consulte el artículo completo sobre Ordenar una lista enlazada de 0, 1 y 2 cambiando los enlaces 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 *