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
.
基本编程题
package leetcode;
import java.io.IOException;
public class RotateList {
public static void main(String[] args) throws IOException {
ListNode h = new ListNode(1);
h.next = new ListNode(2);
RotateList l = new RotateList();
ListNode head = l.rotateRight(h, 4);
while (head != null) {
System.out.println(head.val);
head = head.next;
}
}
public ListNode rotateRight(ListNode head, int n) {
if (head == null || head.next == null) {
return head;
}
ListNode node = head;
int count = 0;
ListNode newHead = null;
ListNode last = null;
while (node != null) {
count++;
node = node.next;
}
node = head;
n = n % count;
if (n == 0) {
return head;
}
int newHeadIndex = count - n + 1;
int index = 1;
while (node != null) {
if (index == newHeadIndex) {
newHead = node;
}
if (node.next == null) {
last = node;
}
ListNode next = node.next;
if (index == newHeadIndex - 1) {
node.next = null;
}
node = next;
index++;
}
last.next = head;
return newHead;
}
}