计算排序和旋转链表中的旋转次数
给定一个先排序的 n 个节点的链表,然后旋转 k 个元素。找出 k 的值。
思想是遍历单向链表来检查条件当前节点的值是否大于下一个节点的值。如果给定的条件为真,则中断循环。否则增加计数器变量并通过 node->next 增加节点。下面是这个方法的实现。
C++
// Program for count number of rotations in
// sorted linked list.
#include
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
Javascript
输出
15 18 5 8 11 12
Linked list rotated elements: 2
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。