旋转说白了 : 就是 尾巴节点 取代 头节点 。尾巴节点前一个节点成为 新的尾巴节点。
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if(k==0 || head==null || head.next == null){
return head;
}
int n = 1;// 记入链表节点个数
ListNode cur = head;
while(cur.next!=null){
cur = cur.next;
n++;
}// 循环结束后 , cur 指向最后一个节点
int move = n - k % n;// 在知道了 节点个数 和 旋转次数,此时我们就可以求 cur 需要走多少步了。
if(move == n){// 当旋转次数 和 节点个数 相等时,旋转了跟没旋转一样,索性直接返回 head 头节点。
return head;
}
cur.next = head;// 将整个链表形成一个环
while(move-- > 0){// cur 开始走 move 步
cur = cur.next;
}
head = cur.next;//
cur.next = null;
return head;
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/DarkAndGrey/article/details/122097209
内容来源于网络,如有侵权,请联系作者删除!