闭合为环
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if (head == null || head.next == null || k == 0){
return head;
}
ListNode dummyHead = new ListNode(0, head);
ListNode last = dummyHead;
int length = 0;
/**
* 先遍历链表得到链表长度,顺便得到尾节点last
*/
while (last.next != null){
length++;
last = last.next;
}
/**
* k对长度取余,就是要旋转的次数,即倒数第k % length个节点是新的头节点
* 如果余数为0,说明不用旋转
*/
if (k % length == 0){
return dummyHead.next;
}
ListNode prev = dummyHead;
for (int i = 0; i < length - (k % length); i++) {
prev = prev.next;
}
dummyHead.next = prev.next;
prev.next = null;
last.next = head;
return dummyHead.next;
}
}
/**
* 时间复杂度 O(n)
* 空间复杂度 O(1)
*/
https://leetcode-cn.com/problems/rotate-list/