这个题目是链表的循环右移
public ListNode rotateRight(ListNode head, int n) {
if(head==null)return null;
if(head.next==null)return head;
if(n==0)return head;
int num=1;
ListNode end=head;
while (end.next!=null){
end=end.next;
num++;
}
end.next=head;
if(num<=n) n=n%num;
num=num-n-1;
while(num>0){
head=head.next;
num--;
}
end = head.next;
head.next=null;
return end;
}
Update 2015/08/20:上面的方法思路没问题,下面的和上面的思路一样
/**
* 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 null;
if (k == 0)
return head;
int len = 1;
ListNode a = head;
while (a.next != null){
len++;
a = a.next;
}
k = k % len;
k = len - k;
a.next = head;
a = head;
while (k-- > 1){
a = a.next;
}
head = a.next;
a.next = null;
return head;
}
}