Programa Javascript para encontrar el elemento medio de una lista vinculada dada

Dada una lista enlazada individualmente, busque el centro de la lista enlazada. Por ejemplo, si la lista enlazada dada es 1->2->3->4->5, entonces la salida debería ser 3. 
Si hay Nodes pares, entonces habría dos Nodes intermedios, necesitamos imprimir el segundo intermedio. elemento. Por ejemplo, si la lista enlazada dada es 1->2->3->4->5->6, entonces la salida debería ser 4. 

Método 1: 
recorrer toda la lista enlazada y contar el no. de Nodes Ahora recorra la lista nuevamente hasta la cuenta/2 y devuelva el Node en la cuenta/2. 

Método 2: 
recorrer la lista enlazada usando dos punteros. Mueva un puntero por uno y los otros punteros por dos. Cuando el puntero rápido llegue al final, el puntero lento llegará a la mitad de la lista enlazada.

La siguiente imagen muestra cómo funciona la función printMiddle en el código:

middle-of-a-given-linked-list-in-C-and-Java1

 

Javascript

<script>
 
// JavaScript program to find
// middle of linked list
 
// Head of linked list
var head;
 
// Linked list node
class Node
{
    constructor(val)
    {
        this.data = val;
        this.next = null;
    }
}
 
// Function to print middle of
// linked list
function printMiddle()
{
    var slow_ptr = head;
    var fast_ptr = head;
    if (head != null)
    {
        while (fast_ptr != null &&
               fast_ptr.next != null)
        {
            fast_ptr = fast_ptr.next.next;
            slow_ptr = slow_ptr.next;
        }
        document.write("The middle element is [" +
                        slow_ptr.data + "] <br/><br/>");
    }
}
 
// Inserts a new Node at front of the list.
function push(new_data)
{
    /* 1 & 2: Allocate the Node &
              Put in the data */
    var 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;
}
 
// This function prints contents of linked
// list starting from the given node
function printList()
{
    var tnode = head;
    while (tnode != null)
    {
        document.write(tnode.data + "->");
        tnode = tnode.next;
    }
    document.write("NULL<br/>");
}
 
for (i = 5; i > 0; --i)
{
    push(i);
    printList();
    printMiddle();
}
// This code is contributed by todaysgaurav
</script>

Producción:

5->NULL
The middle element is [5]

4->5->NULL
The middle element is [5]

3->4->5->NULL
The middle element is [4]

2->3->4->5->NULL
The middle element is [4]

1->2->3->4->5->NULL
The middle element is [3]

Complejidad de tiempo: O(n) donde n es el número de Nodes en la lista enlazada dada.
Espacio auxiliar: O(1), no se requiere espacio adicional, por lo que es una constante.

Método 3: 
Inicialice el elemento medio como cabeza e inicialice un contador como 0. Recorra la lista desde la cabeza, mientras recorre incremente el contador y cambie de mitad a mitad->siguiente siempre que el contador sea impar. Entonces, el medio se moverá solo la mitad de la longitud total de la lista. 
Gracias a Narendra Kangralkar por sugerir este método.  

Javascript

<script>
 
// Javascript program to implement
// the above approach
var head = null;
 
// Link list node
class Node
{
    constructor(next, val)
    {
        this.data = val;
        this.next = next;
    }
}
 
// Function to get the middle of
// the linked list
function printMiddle(head)
{
    var count = 0;
    var mid = head;
 
    while (head != null)
    {
        // Update mid, when 'count'
        // is odd number
        if ((count % 2) == 1)
            mid = mid.next;
 
        ++count;
        head = head.next;
    }
 
    // If empty list is provided
    if (mid != null)
        document.write("The middle element is [" +
                        mid.data + "]<br/><br/>");
}
 
function push(head_ref, new_data)
{
    // Allocate node
    var new_node = new Node(head_ref,
                            new_data);
 
    // Move the head to point to the new node
    head = new_node;
    return head;
}
 
// A utility function to print
// given linked list
function printList(head)
{
    while (head != null)
    {
        document.write(head.data + "-> ");
        head = head.next;
    }
    document.write("null<br/>");
}
 
// Driver code
for (i = 5; i > 0; i--)
{
    head = push(head, i);
    printList(head);
    printMiddle(head);
}
// This code contributed by gauravrajput1
</script>

Producción:

5->NULL
The middle element is [5]

4->5->NULL
The middle element is [5]

3->4->5->NULL
The middle element is [4]

2->3->4->5->NULL
The middle element is [4]

1->2->3->4->5->NULL
The middle element is [3]

Complejidad de tiempo: O(n) donde n es el número de Nodes en la lista enlazada dada.
Espacio auxiliar: O(1), no se requiere espacio adicional, por lo que es una constante.

¡ Consulte el artículo completo sobre Encontrar el medio de una lista vinculada dada 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 *