From d22a85cdd099299134304dfaed8b4601aa9d7f6d Mon Sep 17 00:00:00 2001 From: Golden-Bug <56538794+Golden-Bug@users.noreply.github.com> Date: Thu, 1 Oct 2020 07:19:46 +0530 Subject: [PATCH] Creating rotate list --- data_structures/linked_list/rotate_list.py | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 data_structures/linked_list/rotate_list.py diff --git a/data_structures/linked_list/rotate_list.py b/data_structures/linked_list/rotate_list.py new file mode 100644 index 0000000..fd4c3fa --- /dev/null +++ b/data_structures/linked_list/rotate_list.py @@ -0,0 +1,38 @@ +""" +Given a list, rotate the list to the right by k places, +where k is non-negative. +For example: +Given 1->2->3->4->5->NULL and k = 2, +return 4->5->1->2->3->NULL. +""" + +# Definition for singly-linked list. +# class ListNode(object): +# def __init__(self, x): +# self.val = x +# self.next = None + + +def rotate_right(head, k): + """ + :type head: ListNode + :type k: int + :rtype: ListNode + """ + if not head or not head.next: + return head + current = head + length = 1 + # count length of the list + while current.next: + current = current.next + length += 1 + # make it circular + current.next = head + k = k % length + # rotate until length-k + for i in range(length-k): + current = current.next + head = current.next + current.next = None + return head