Cuente las rotaciones en una lista enlazada ordenada y rotada

Dada una lista enlazada de n Nodes que primero se ordena y luego se rota por k elementos. Encuentre el valor de k.

C++

// Program for count number of rotations in
// sorted linked list.
#include <bits/stdc++.h>
using namespace std;
/* Linked list node */
struct Node {
    int data;
    struct Node* next;
};
 
// Function that count number of
// rotation in singly linked list.
int countRotation(struct Node* head)
{
    // declare count variable and assign it 1.
    int count = 0;
 
    // declare a min variable and assign to
    // data of head node.
    int min = head->data;
 
    // check that while head not equal to NULL.
    while (head != NULL) {
 
        // if min value is greater then head->data
        // then it breaks the while loop and
        // return the value of count.
        if (min > head->data)
            break;
 
        count++;
 
        // head assign the next value of head.
        head = head->next;
    }
    return count;
}
 
// Function to push element in linked list.
void push(struct Node** head, int data)
{
    // Allocate dynamic memory for newNode.
    struct Node* newNode = new Node;
 
    // Assign the data into newNode.
    newNode->data = data;
 
    // newNode->next assign the address of
    // head node.
    newNode->next = (*head);
 
    // newNode become the headNode.
    (*head) = newNode;
}
 
// Display linked list.
void printList(struct Node* node)
{
    while (node != NULL) {
        printf("%d ", node->data);
        node = node->next;
    }
}
 
// Driver functions
int main()
{
    // Create a node and initialize with NULL
    struct Node* head = NULL;
 
    // push() insert node in linked list.
    // 15 -> 18 -> 5 -> 8 -> 11 -> 12
    push(&head, 12);
    push(&head, 11);
    push(&head, 8);
    push(&head, 5);
    push(&head, 18);
    push(&head, 15);
 
    printList(head);
    cout << endl;
    cout << "Linked list rotated elements: ";
 
    // Function call countRotation()
    cout << countRotation(head) << endl;
 
    return 0;
}

Java

// Program for count number of rotations in
// sorted linked list.
import java.util.*;
 
class GFG
{
   
/* Linked list node */
static class Node {
    int data;
    Node next;
};
 
// Function that count number of
// rotation in singly linked list.
static int countRotation(Node head)
{
   
    // declare count variable and assign it 1.
    int count = 0;
 
    // declare a min variable and assign to
    // data of head node.
    int min = head.data;
 
    // check that while head not equal to null.
    while (head != null) {
 
        // if min value is greater then head.data
        // then it breaks the while loop and
        // return the value of count.
        if (min > head.data)
            break;
 
        count++;
 
        // head assign the next value of head.
        head = head.next;
    }
    return count;
}
 
// Function to push element in linked list.
static Node push(Node head, int data)
{
    // Allocate dynamic memory for newNode.
    Node newNode = new Node();
 
    // Assign the data into newNode.
    newNode.data = data;
 
    // newNode.next assign the address of
    // head node.
    newNode.next = (head);
 
    // newNode become the headNode.
    (head) = newNode;
    return head;
}
 
// Display linked list.
static void printList(Node node)
{
    while (node != null) {
        System.out.printf("%d ", node.data);
        node = node.next;
    }
}
 
// Driver functions
public static void main(String[] args)
{
   
    // Create a node and initialize with null
    Node head = null;
 
    // push() insert node in linked list.
    // 15.18.5.8.11.12
    head = push(head, 12);
    head = push(head, 11);
    head = push(head, 8);
    head = push(head, 5);
    head = push(head, 18);
    head = push(head, 15);
 
    printList(head);
    System.out.println();
    System.out.print("Linked list rotated elements: ");
 
    // Function call countRotation()
    System.out.print(countRotation(head) +"\n");
 
}
}
 
// This code contributed by gauravrajput1

Python3

# Program for count number of rotations in
# sorted linked list.
 
# Linked list node
class Node:
     
    def __init__(self, data):
         
        self.data = data
        self.next = None
 
# Function that count number of
# rotation in singly linked list.
def countRotation(head):
 
    # Declare count variable and assign it 1.
    count = 0
  
    # Declare a min variable and assign to
    # data of head node.
    min = head.data
  
    # Check that while head not equal to None.
    while (head != None):
  
        # If min value is greater then head->data
        # then it breaks the while loop and
        # return the value of count.
        if (min > head.data):
            break
  
        count += 1
  
        # head assign the next value of head.
        head = head.next
     
    return count
 
# Function to push element in linked list.
def push(head, data):
 
    # Allocate dynamic memory for newNode.
    newNode = Node(data)
  
    # Assign the data into newNode.
    newNode.data = data
  
    # newNode->next assign the address of
    # head node.
    newNode.next = (head)
  
    # newNode become the headNode.
    (head) = newNode
    return head
 
# Display linked list.
def printList(node):
 
    while (node != None):
        print(node.data, end = ' ')
        node = node.next
     
# Driver code
if __name__=='__main__':
     
    # Create a node and initialize with None
    head = None
  
    # push() insert node in linked list.
    # 15 -> 18 -> 5 -> 8 -> 11 -> 12
    head = push(head, 12)
    head = push(head, 11)
    head = push(head, 8)
    head = push(head, 5)
    head = push(head, 18)
    head = push(head, 15)
  
    printList(head);
    print()
    print("Linked list rotated elements: ",
          end = '')
  
    # Function call countRotation()
    print(countRotation(head))
 
# This code is contributed by rutvik_56

C#

// Program for count number of rotations in
// sorted linked list.
using System;
class LinkedList{
       
// Head of linked list 
Node head;
   
// Linked list node
class Node
{
    public int data;
    public Node next;
       
    public Node(int d)
    {
        data = d;
        next = null;
    }
}
   
int countRotation()
{
    // declare count variable and assign it 1.
    int count = 0;
  
    // declare a min variable and assign to
    // data of head node.
    int min = head.data;
  
    // check that while head not equal to NULL.
    while (head != null) {
  
        // if min value is greater then head->data
        // then it breaks the while loop and
        // return the value of count.
        if (min > head.data)
            break;
  
        count++;
  
        // head assign the next value of head.
        head = head.next;
    }
    return count;
}
   
// Inserts a new Node at front of the list.
public void push(int new_data)
{
       
    /* 1 & 2: Allocate the Node &
              Put in the data*/
    Node 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 that count number of
// rotation in singly linked list.
public void printList()
{
    Node tnode = head;
    while (tnode != null)
    {
        Console.Write(tnode.data + "->");
        tnode = tnode.next;
    }
    Console.WriteLine("NULL");
}
   
// Driver code
static public void Main()
{
    LinkedList llist = new LinkedList();
     
    llist.push(12);
    llist.push(11);
    llist.push(8);
    llist.push(5);
    llist.push(18);
    llist.push(15);
         
    llist.printList();
    Console.Write("Linked list rotated elements: ");
    Console.WriteLine(llist.countRotation());
}
}
   
// This code is contributed by Aarti_Rathi

Javascript

<script>
 
// Program for count number of rotations in
// sorted linked list.
 
/* Linked list node */
class Node
{
    constructor()
    {
        this.data=0;
        this.next=null;
    }
}   
 
// Function that count number of
// rotation in singly linked list.
function countRotation(head)
{
    // declare count variable and assign it 1.
    let count = 0;
  
    // declare a min variable and assign to
    // data of head node.
    let min = head.data;
  
    // check that while head not equal to null.
    while (head != null) {
  
        // if min value is greater then head.data
        // then it breaks the while loop and
        // return the value of count.
        if (min > head.data)
            break;
  
        count++;
  
        // head assign the next value of head.
        head = head.next;
    }
    return count;
}
 
// Function to push element in linked list.
function push(head,data)
{
    // Allocate dynamic memory for newNode.
    let newNode = new Node();
  
    // Assign the data into newNode.
    newNode.data = data;
  
    // newNode.next assign the address of
    // head node.
    newNode.next = (head);
  
    // newNode become the headNode.
    (head) = newNode;
    return head;
}
 
// Display linked list.
function printList(node)
{
    while (node != null) {
        document.write(node.data+" ");
        node = node.next;
    }
}
 
// Driver functions
// Create a node and initialize with null
let head = null;
 
// push() insert node in linked list.
// 15.18.5.8.11.12
head = push(head, 12);
head = push(head, 11);
head = push(head, 8);
head = push(head, 5);
head = push(head, 18);
head = push(head, 15);
 
printList(head);
document.write("<br>");
document.write("Linked list rotated elements: ");
 
// Function call countRotation()
document.write(countRotation(head) +"<br>");
 
 
// This code is contributed by unknown2108
 
</script>

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 *