题目传送地址: https://leetcode.cn/problems/rotate-list/
运行效率:
代码如下:
public static ListNode rotateRight(ListNode head, int k) {
//处理边界情况
if(head==null||head.next==null||k==0){
return head;
}
//先要知道链表的长度是多少
int length = 1;
ListNode tailNode = head; //尾结点
//遍历的过程顺便也把尾结点找到
while (tailNode.next != null) {
length++;
tailNode = tailNode.next;
}
//比如链表长度是6,当k=11和k=5旋转以后的效果是一样的
k = k % length;
if(k==0){
return head;
}
//新链表的头结点在原链表中的位置是length-k 新链表的尾结点在原链表中的位置是length-k
ListNode newTailNode = head;
int index = 0;
while (index < length - k-1) {
newTailNode = newTailNode.next;
index++;
}
ListNode newHeadNode = newTailNode.next;
newTailNode.next = null;
tailNode.next = head;
return newHeadNode;
}