输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]
/*** 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 (head == null || head.next == null) {return head;}// 链表长度int length = getLength(head);// 取余k = k % length;// 算出头节点右移多少之后得到新的头节点k = length - k;// 尾节点,后面需要连到旧头节点ListNode tail = getTail(head);ListNode temp = head;while (k > 1) {temp = temp.next;k--;}// 此时,temp.next是新的头节点// 旧尾节点连到旧头节点tail.next = head;// 新头节点head = temp.next;// temp是新头节点的上一个节点,断开与新头结点的链接temp.next = null;return head;}private ListNode getTail(ListNode head) {while (head != null) {if (head.next == null) {break;}head = head.next;}return head;}private int getLength(ListNode head) {int length = 0;while (head != null) {length++;head = head.next;}return length;}
}