思路
题目地址:https://leetcode-cn.com/problems/rotate-list/
思路:
- 算出链表的长度length
- k = k % length,为0的话直接返回原来的头节点即可
- 头尾相接,此时最新的头节点为原来的头节点往后走length-k步,断开length-k-1和length-k-1的netx指针即可
代码
public class Solution {
public ListNode rotateRight(ListNode head, int k) {
if (head == null) {
return null;
}
int length = 0;
ListNode headNode = head;
ListNode tailNode = head;
ListNode tempNode = head;
while (tempNode != null) {
tailNode = tempNode;
tempNode = tempNode.next;
length++;
}
k = k % length;
if (k == 0) {
return headNode;
}
tailNode.next = headNode;
tempNode = head;
for (int i = 0; i < length - k - 1; i++) {
tempNode = tempNode.next;
}
ListNode newHeadNode = tempNode.next;
tempNode.next = null;
return newHeadNode;
}
}