/* 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. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class RotateList { public ListNode rotateRight(ListNode head, int n) { if (head==null|| n==0){ return head; } int len=1; ListNode last=head; // calculate the lenght of given list while(last.next!=null){ last=last.next; len++; } last.next=head; // Should considered the situtation that n larger than given list's length int k=len-n%len; ListNode preHead=last; // find the point which are previuse for our target head while(k>0){ preHead=preHead.next; k--; } head=preHead.next; preHead.next=null; return head; } }