题目
旋转说白了 : 就是 尾巴节点 取代 头节点 。尾巴节点前一个节点成为 新的尾巴节点。
解题思维
代码
/**
* 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;
}
}