給定單鏈表頭節點 head 和非負整數 k,將鏈表向右旋轉 k 位。即斷開倒數第 k 個節點後的部分接到頭部。k 可能大於鏈表長度。
len,同時尾節點 tail 記錄。k %= len;若 k==0 直接返回 head。fast 先走 k 步。slow 從 head 出發,fast 和 slow 同步前進,直到 fast->next == nullptr。此時 slow 指向新尾節點(倒數第 k+1 個)。newHead = slow->next;slow->next = nullptr;tail->next = head;返回 newHead。
public ListNode rotateRight(ListNode head, int k) {
if(head==null || head.next==null) return head;
ListNode fast=head, slow=head;
int len=0; ListNode tail=head;
while(tail!=null){ len++; if(tail.next==null) break; tail=tail.next; }
k %= len; if(k==0) return head;
for(int i=0;i
k ≥ len。