class Solution {
public ListNode rotateRight(ListNode head, int k) {
if(head==null || k==0) {
return head;
}
ListNode cur = head;//假节点指头
ListNode tail = null;//尾
int length = 1;
while(cur.next != null) {
cur = cur.next;
length++;
}//求长度
int num = length-(k%length);
tail = cur;//指尾
cur.next = head;//改循环链表
cur = head;
for(int i=0;i<num;i++) {
cur = cur.next;
tail = tail.next;
}
tail.next = null;//改回单链表
return cur;//返回头
}
}
本题说是循环旋转,但其实是将尾部向前数第K个元素作为头,原来的头接到原来的尾上,这应该也是一种更好的思路
该博客探讨了一种实现链表循环旋转的方法,通过创建假节点和尾指针,找到旋转次数,然后调整链表结构。这个算法将链表尾部向前数第K个元素作为新的头节点,原头节点连接到原尾节点,形成旋转后的链表。
187

被折叠的 条评论
为什么被折叠?



