Python3程序计算排序和旋转链表中的旋转
给定一个由 n 个节点组成的链表,该链表首先排序,然后旋转 k 个元素。求 k 的值。
这个想法是遍历单链表来检查当前节点值是否大于下一个节点的值。如果给定条件为真,则中断循环。否则增加计数器变量并通过node->next增加节点。下面是这种方法的实现。
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
输出
15 18 5 8 11 12
Linked list rotated elements: 2
有关详细信息,请参阅有关排序和旋转链表中的计数旋转的完整文章!