描述:
给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数
样例:
给出链表1->2->3->4->5->null和k=2
返回4->5->1->2->3->null
思路:
借用Arraylist
/**
* 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) {
// write your code here
if(head == null){
return head;
}
ListNode p = head;
ListNode q = head;
ArrayList<Integer> temp = new ArrayList<Integer>();
while(head != null){
temp.add(head.val);
head = head.next;
}
while(k >= temp.size()){
k -= temp.size();
}
for(int i = 0;i<temp.size();i++){
if(i<k){
p.val = temp.get(temp.size() - k + i);
}else{
p.val = temp.get(i - k);
}
p = p.next;
}
return q;
}
}