####思路
双指针法:第一个指针先走n+1步,然后一起走,知道第一个指针到终点:
第二个指针的next设置为新的head;
第二个指针的next设置为null;
第一个指针的前一个节点的next指向head;
返回新的head。
####NOTE
长度为0时
长度等于链表长度时
长度超过链表长度时
####java code
/**
* 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) {
// Start typing your Java solution below
// DO NOT write main() function
if (0 == n) return head;
if (null == head) return null;
int l = 0;
ListNode tmp = head;
while(null != tmp) {
++l;
tmp = tmp.next;
}
n %= l;
if (0 == n) return head;
ListNode fast = head, slow = head, last = null;
while(n >= 0 && null != fast) {
last = fast;
fast = fast.next;
--n;
}
if (n >= 0 && null == fast) return head;
while(null != fast) {
slow = slow.next;
last = fast;
fast = fast.next;
}
ListNode newHead = slow.next;
slow.next = null;
last.next = head;
return newHead;
}
}