Example 1:
Input: 1->2->3->4->5->NULL, k = 2 Output: 4->5->1->2->3->NULL Explanation: rotate 1 steps to the right: 5->1->2->3->4->NULL rotate 2 steps to the right: 4->5->1->2->3->NULL Example 2:
Input: 0->1->2->NULL, k = 4 Output: 2->0->1->NULL Explanation: rotate 1 steps to the right: 2->0->1->NULL rotate 2 steps to the right: 1->2->0->NULL rotate 3 steps to the right: 0->1->2->NULL rotate 4 steps to the right: 2->0->1->NULL java:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode rotateRight(ListNode head, int k) { if(head==null) return null; ListNode tail = head; while(tail.next!=null){ tail = tail.next; } tail.next = head; ListNode fast= head,low = head; while(k>0){ fast = fast.next; k--; } while(fast!=tail){ fast = fast.next; low = low.next; } head = low.next; low.next = null; return head; } }python:
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def rotateRight(self, head: ListNode, k: int) -> ListNode: if not head: return None if head.next == None: return head pointer = head length = 1 while pointer.next: pointer = pointer.next length += 1 rotateTimes = k%length if k == 0 or rotateTimes == 0: return head fastPointer = head slowPointer = head for a in range (rotateTimes): fastPointer = fastPointer.next while fastPointer.next: slowPointer = slowPointer.next fastPointer = fastPointer.next temp = slowPointer.next slowPointer.next = None fastPointer.next = head head = temp return head