# Rotate List

ID: 61; medium

## Solution 1 (Java)

``````/**
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode() {}
*     ListNode(int val) { this.val = val; }
*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode rotateRight(ListNode head, int k) {
ListNode dummy = new ListNode(0, head);
while (k > 0) {
ListNode secondToLastNode = findSecondToLastNode(dummy.next);
ListNode lastNode = secondToLastNode.next;
lastNode.next = dummy.next;
dummy.next = lastNode;
secondToLastNode.next = null;
k--;
}
return dummy.next;
}

}
}

int length = 0;
length++;
}
return length;
}
}``````

## Solution 2 (Java)

``````/**
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode() {}
*     ListNode(int val) { this.val = val; }
*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if (head == null || head.next == null || k == 0) {
}

int length = 1;
while (runner.next != null) {
runner = runner.next;
length++;
}

// runner is the last node now
// a cycle is formed
k %= length;
k = length - k;
while (k > 0) {
runner = runner.next;
k--;
}
// find the last node of the new list using k