61.旋转链表
1.题目描述
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
示例 1:

输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]
示例 2:

输入:head = [0,1,2], k = 4
输出:[2,0,1]
2.解题过程
首先遍历链表,获得链表的长度count,然后将链表尾部的next指向头部,形成一个环;接着向右移动count - k % count的长度,将链表断开,返回断开后的头节点即可。
class Solution {
    public ListNode rotateRight(ListNode head, int k) {
        if (k == 0 || head == null || head.next == null) {
            return head;
        }
        int count = 1;
        ListNode cursor = head;
        while (cursor.next != null) {
            cursor = cursor.next;
            count++;
        }
        int countDown = count - k % count;
        cursor.next = head;
        while (countDown > 0) {
            cursor = cursor.next;
            countDown--;
        }
        ListNode ret = cursor.next;
        cursor.next = null;
        return ret;
    }
}