说是循环旋转,但其实本质上是将尾部向前数第K个元素作为头,原来的头接到原来的尾上
先遍历求得链表总长度count,同时将链表首尾相连;
再找到原链表的倒数第k+1个节点,该节点的next就是新链表的头结点。
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if(head==null||head.next==null||k==0)return head;
int sum=1;
ListNode temp=head;
//计算sum
while(temp.next!=null){
sum++;
temp=temp.next;
}
//计算k
k%=sum;
if(k==0)return head;
//连接首尾
temp.next=head;
//找到第k+1个结点,当前temp在链表末尾
for(int i=0;i<sum-k;i++){
temp=temp.next;
}
//此刻newnode指向倒数第k个元素
ListNode newnode=temp.next;
//断开链循环,将newnode作为链头,temp作为链尾
temp.next=null;
return newnode;
}
}