Given a list, rotate the list to the right by k places, where k is non-negative.
Example:
Given 1->2->3->4->5->NULL and k = 2, return 4->5->1->2->3->NULL.
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * public int val; 5 * public ListNode next; 6 * public ListNode(int x) { val = x; } 7 * } 8 */ 9 public class Solution { 10 public ListNode RotateRight(ListNode head, int k) { 11 if (head == null || k <= 0) return head; 12 13 var fakeHead = new ListNode(1); 14 fakeHead.next = head; 15 16 int count = 1; 17 ListNode next = fakeHead.next; 18 while (next.next != null) 19 { 20 count++; 21 next = next.next; 22 } 23 24 if (count > 1) 25 { 26 // implement using rotating right by rotating left, rotating right is a little bit harder because it's hard 27 // to track the prior node 28 for (int i = 0; i < count - k % count; i++) 29 { 30 var tmp = fakeHead.next; 31 fakeHead.next = tmp.next; 32 tmp.next = null; 33 next.next = tmp; 34 next = tmp; 35 } 36 } 37 38 return fakeHead.next; 39 } 40 }