Question:
Given a linked list, rotate the list to the right by k places, where k is non-negative.
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
Note:
If k == 0
ork%n == 0
, we don’t need to do any rotation, just return the original head.
Solution:
/**
* class ListNode {
* public int value;
* public ListNode next;
* public ListNode(int value) {
* this.value = value;
* next = null;
* }
* }
*/
public class Solution {
public ListNode rotateKplace(ListNode head, int n) {
if (head == null || head.next == null) {
return head;
}
ListNode cur = head;
int count = 1;
while (cur!= null && cur.next != null) {
cur = cur.next;
count++;
}
n = n%count; //0
if (n == 0) {
return head;
}
int tailIndex = count - n; // 2
cur = head;
while (tailIndex > 1) {
cur = cur.next;
tailIndex--;
}
ListNode newHead = cur.next; //2
cur.next = null;
cur = newHead;
while (cur != null && cur.next != null) {
cur = cur.next;
}
cur.next = head;
return newHead;
}
}