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位
K可能大于list的长度,则从head开始继续移动,直到n=0
注意链表结尾赋为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;
if (n == 0)
return head;
ListNode p1 = null;
ListNode p2 = null;
int num = n;
while (num > 0) {
p1 = head;
num--;
while (num > 0 && p1.next != null) {
p1 = p1.next;
num--;
}
}
if (num == 0) { //p2与p1相距k个位置
while (p1.next != null) {
p1 = p1.next;
if(p2==null)
p2=head;
else p2 = p2.next;
}
}
if(p2!=null){
p1.next = head; //旋转
head=p2.next;
p2.next=null; //注意链表结尾要赋为null
}
return head;
}
}