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;
}
}