/**
* 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)
return head;
int listLength = getListLength(head);
k = k % listLength;
// 构造头节点
ListNode pHead = new ListNode(-1);
pHead.next = head;
ListNode p = head;
// 先将链表断开,在按照尾插法插入到第一个链表后面
for (int i = 1; i <= listLength - k - 1; i++)
p = p.next;
// 将链表断开
ListNode q = p.next;
p.next = null;
// q进行尾插法
ListNode temp = pHead;
while (q != null) {
p = q.next;
q.next = temp.next;
temp.next = q;
q = p;
temp = temp.next;
}
return pHead.next;
}
private int getListLength(ListNode head) {
// 获取链表长度
int length = 0;
for (ListNode p = head; p != null; p = p.next)
++length;
return length;
}
}