鏈表的應用
乍一看這道題很麻煩,不過當我們仔細觀察後可以發現,不論 k 取何值,旋轉的次數實際爲 k % len ,len 爲鏈表的長度。因此這道題的任務就是找到倒數第 k 個數據,使倒數第 k-1 個數據的next 指向 NULL,最後使鏈表最後一個數據的next指向head。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* rotateRight(struct ListNode* head, int k){
if(head == NULL || head->next == NULL || k == 0){
return head;
}
struct ListNode *p = head, *end = head, *ans = head;
int len = 0, n = 0;
while(p){
len++;
end = p;
p = p->next;
}
p = head;
k %= len;
n = len - k;
if(k == 0){
return head;
}
for(int i = 0;i < n-1; i++){
p = p->next;
}
ans = p->next;
p->next = NULL;
end->next = head;
return ans;
}