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
.
这题写的好丑,磕磕绊绊才过
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode rotateRight(ListNode head, int n) {
if(head==null)
return head;
int num = 0;
ListNode res = new ListNode(-1);
res.next = head;
while(head!=null){
num++;
head=head.next;
}
n%=num;
n=num-n;
if(n==0)
return head;
head = res.next;
int i=1;
while(i<n){
head=head.next;
i++;
}
ListNode pre = new ListNode(-1);
pre.next = head.next;
if(pre.next==null)
return res.next;
head.next=null;
head=pre.next;
while(head.next!=null)
head=head.next;
head.next=res.next;
return pre.next;
}
}