题目链接
旋转链表
题目描述
注意点
- 链表中节点的数目在范围 [0, 500] 内
解答思路
- 因为k可能比链表长度大,所以需要先找到链表的长度len,同时储存尾节点(需要将尾节点与首节点相连),根据k % len计算出链表需要向右移动的位置,新的头节点也就是第(len - k % len)个节点,同时将新的尾节点指向null即可
代码
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if (head == null) {
return head;
}
int len = 1;
ListNode oldTail = head;
while (oldTail.next != null) {
oldTail = oldTail.next;
len++;
}
k = len - k % len;
if (k == len) {
return head;
}
ListNode newTail = head;
for (int i = 0; i < k - 1; i++) {
newTail = newTail.next;
}
ListNode newHead = newTail.next;
// 设置为尾节点
newTail.next = null;
oldTail.next = head;
return newHead;
}
}
关键点
- 需要将原链表的首尾相连,并将旋转后的链表新的首尾断开