一.问题描述
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]
二.示例代码
public class RotatingLinkedList61 {
public static void main(String[] args) {
ListNode listNode1 = new ListNode(1);
ListNode listNode2 = new ListNode(2);
ListNode listNode3 = new ListNode(3);
ListNode listNode4 = new ListNode(4);
ListNode listNode5 = new ListNode(5);
listNode1.next = listNode2;
listNode2.next = listNode3;
listNode3.next = listNode4;
listNode4.next = listNode5;
int k = 2;
ListNode result = rotatingLinkedList(listNode1, k);
System.out.println(result);
}
private static ListNode rotatingLinkedList(ListNode root, int k) {
int length = 1;
ListNode tempNode = root;
while (tempNode.next != null) {
length++;
tempNode = tempNode.next;
}
k %= length;
int moveIndex = length - k;
tempNode.next = root;
while (moveIndex > 0) {
tempNode = tempNode.next;
moveIndex--;
}
ListNode result = tempNode.next;
tempNode.next = null;
return result;
}
public static ListNode rotateRight(ListNode head, int k) {
if (head == null || k == 0) {
return head;
}
int n = 0;
ListNode tail = null;
for (ListNode p = head; p != null; p = p.next) {
tail = p;
n++;
}
k %= n;
ListNode p = head;
for (int i = 0; i < n - k - 1; i++) {
p = p.next;
}
tail.next = head;
head = p.next;
p.next = null;
return head;
}
}