题目理解:
假设先前的链表长度为n,求解将前n-k个元素移动到从k开始的链表之后的结果;
题目分析:
1. 注意k>n的情况(k=k%n);
2. 典型的指针操作;
解题代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode rotateRight(ListNode head, int k) {
ListNode ans=null;
if(head==null){
return ans;
}
int len=0;
ListNode p1=head.next;
while(true){
len++;
if(p1==null){
break;
}else{
p1=p1.next;
}
}
int moveK;
if(k<len){
moveK=k;
}else{
moveK=k%len;
}
if(moveK==0){
return head;
}
p1=head;
ListNode p2=p1.next;
for(int i=1; i<len-moveK;i++){
p1=p1.next;
p2=p1.next;
}
p1.next=null;
ans=p2;
p1=p2;
while(p1.next!=null){
p1=p1.next;
}
p1.next=head;
return ans;
}
}