1. 题目
题目链接61. 旋转链表
2. 思路
意思就是将最后的k个节点放到链表前面即可,如果k大于链表长度,取余数即可:
3. 代码
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if (head == null || head.next == null) return head;
// 先找到链表的长度
int len = 1;
ListNode curr = head;
ListNode prev = head;
while (curr.next != null) {
len++;
curr = curr.next;
// 保证prev在链表的最后一个节点上
prev = curr;
}
// 把k映射到链表长度以内,因为k可能大于长度
k = k % len;
ListNode dummyNode = new ListNode(0);
dummyNode.next = head;
curr = head;
// 把curr放到len - k的位置上
len = len - k;
while (len > 1) {
curr = curr.next;
len--;
}
// 把尾巴上的k个元素放到链表头部
prev.next = dummyNode.next;
dummyNode.next = curr.next;
curr.next = null;
return dummyNode.next;
}
}