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
.
链表右移K位
解法一:O(N)
public class Solution {
public ListNode rotateRight(ListNode head, int n) {
if(n <= 0 || head == null) return head;
ListNode p1 = head;
ListNode p2 = head;
ListNode pre1 = null, pre2=null;//分别记录两个指针的前一个节点位置
int k=0;
while(p1 != null && k<n){
pre1 = p1;
p1 = p1.next;
k++;
}
if(p1 == null){//如果k比链表的长度要大
n %= k;
return rotateRight(head, n);
}
//
while(p1 != null){
pre1 = p1;
p1 = p1.next;
pre2 = p2;
p2 = p2.next;
}
pre1.next = head;
if(pre2 != null)
pre2.next = null;
return p2;
}
}
解法二:先遍历出链表的长度,再找到那个断点,转换,2*O(N)