[Lintcode]Rotate List回転チェーンテーブル
1225 ワード
Given a list, rotate the list to the right by
Example
Given
k
places, where k is non-negative. Example
Given
1->2->3->4->5
and k = 2
, return 4->5->1->2->3
. /**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/**
* @param head: the List
* @param k: rotate to the right k places
* @return: the list after rotation
*/
public ListNode rotateRight(ListNode head, int k) {
if(head == null || k == 0) return head;
ListNode tmp = head;
int length = 1;
while(tmp.next != null) {
tmp = tmp.next;
length ++;
}
k = k % length;
int diff = length - k;// k head
if(diff == 0) return head;
tmp.next = head;
ListNode res = null;
while(diff > 1) {
head = head.next;
diff--;
}
res = head.next;
head.next = null;
return res;
}
}