Programa Java para la rotación en el sentido de las agujas del reloj de la lista enlazada

Dada una lista enlazada individualmente y un número entero K , la tarea es rotar la lista enlazada en el sentido de las agujas del reloj hacia la derecha K lugares.
Ejemplos: 
 

Entrada: 1 -> 2 -> 3 -> 4 -> 5 -> NULL, K = 2 
Salida: 4 -> 5 -> 1 -> 2 -> 3 -> NULL
Entrada: 7 -> 9 -> 11 – > 13 -> 3 -> 5 -> NULO, K = 12 
Salida: 7 -> 9 -> 11 -> 13 -> 3 -> 5 -> NULO 
 

Enfoque: para rotar la lista enlazada, primero verifique si el k dado es mayor que el recuento de Nodes en la lista enlazada o no. Recorra la lista y encuentre la longitud de la lista enlazada, luego compárela con k, si es menor, continúe, de lo contrario, dedúzcala en el rango del tamaño de la lista enlazada tomando el módulo con la longitud de la lista. 
Después de eso, reste el valor de k de la longitud de la lista. Ahora, la pregunta se ha cambiado a la rotación izquierda de la lista enlazada, así que siga ese procedimiento: 
 

  • Cambie el siguiente del k-ésimo Node a NULL.
  • Cambia el siguiente del último Node al Node principal anterior.
  • Cambie la cabeza a (k+1)th Node.

Para hacerlo, se requieren los punteros al k-ésimo Node, (k+1)-ésimo Node y al último Node.
A continuación se muestra la implementación del enfoque anterior: 
 

Java

// Java implementation of the approach
class GFG
{
     
/* Link list node */
static class Node
{
    int data;
    Node next;
}
 
/* A utility function to push a node */
static Node push(Node head_ref, int new_data)
{
    /* allocate node */
    Node 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;
}
 
/* A utility function to print linked list */
static void printList(Node node)
{
    while (node != null)
    {
        System.out.print(node.data + " -> ");
        node = node.next;
    }
    System.out.print( "null");
}
 
// Function that rotates the given linked list
// clockwise by k and returns the updated
// head pointer
static Node rightRotate(Node head, int k)
{
 
    // If the linked list is empty
    if (head == null)
        return head;
 
    // len is used to store length of the linked list
    // tmp will point to the last node after this loop
    Node tmp = head;
    int len = 1;
    while (tmp.next != null)
    {
        tmp = tmp.next;
        len++;
    }
 
    // If k is greater than the size
    // of the linked list
    if (k > len)
        k = k % len;
 
    // Subtract from length to convert
    // it into left rotation
    k = len - k;
 
    // If no rotation needed then
    // return the head node   
    if (k == 0 || k == len)
        return head;
 
    // current will either point to
    // kth or null after this loop
    Node current = head;
    int cnt = 1;
    while (cnt < k && current != null)
    {
        current = current.next;
        cnt++;
    }
 
    // If current is null then k is equal to the
    // count of nodes in the list
    // Don't change the list in this case
    if (current == null)
        return head;
 
    // current points to the kth node
    Node kthnode = current;
 
    // Change next of last node to previous head
    tmp.next = head;
 
    // Change head to (k+1)th node
    head = kthnode.next;
 
    // Change next of kth node to null
    kthnode.next = null;
 
    // Return the updated head pointer
    return head;
}
 
// Driver code
public static void main(String args[])
{
 
    /* The constructed linked list is:
    1.2.3.4.5 */
    Node head = null;
    head = push(head, 5);
    head = push(head, 4);
    head = push(head, 3);
    head = push(head, 2);
    head = push(head, 1);
 
    int k = 2;
 
    // Rotate the linked list
    Node updated_head = rightRotate(head, k);
 
    // Print the rotated linked list
    printList(updated_head);
}
}
 
// This code is contributed by Arnub Kundu
Producción: 

4 -> 5 -> 1 -> 2 -> 3 -> NULL

 

Complejidad de tiempo : O (N), ya que estamos usando un bucle para atravesar N veces. Donde N es el número de Nodes en la lista enlazada.

Espacio auxiliar : O(1), ya que no estamos utilizando ningún espacio adicional.
 

Consulte el artículo completo sobre la rotación en el sentido de las agujas del reloj de la 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 *