leetcode
题目描述给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
1.将链表头尾相连形成一个环
2.计算链表总长度sum,并找到尾结点
3.根据链表总长度计算要旋转移动的长度sum-k%sum;
4.找到新的头结点,并将其与上一个节点断开
tip:链表是顺时针,head是逆时针旋转,所以旋转移动的长度为sum-k (k<0);又因为如果k>n,例如k=5,sum=3,即转了1圈再转2个,环形链表相当于移动了两个,所以k=k%sum,综上要旋转移动的长度为sum-k%sum。
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if(head == null || k==0){
return head;
}
ListNode cur = head;
int sum = 1;
while(cur.next != null){
sum++;
cur = cur.next;
}
cur.next = head;
for(int i=0;i
cur = cur.next;
}
ListNode res = cur.next;
cur.next = null;
return res;
}
}



