📜  Python3程序计算排序和旋转链表中的旋转

📅  最后修改于: 2022-05-13 01:55:39.474000             🧑  作者: Mango

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

有关详细信息,请参阅有关排序和旋转链表中的计数旋转的完整文章!