leetcode 61. 旋轉鏈表

鏈表的應用

乍一看這道題很麻煩,不過當我們仔細觀察後可以發現,不論 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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章