leetcode 19. 刪除鏈表的倒數第N個節點

依舊是鏈表的應用

最開始看到這道題的時候,想法很暴力,遍歷一遍得到長度,然後再遍歷一遍刪除指定元素。後來看來大佬的題解發現可以使用雙指針的方法,只需要一次遍歷就可以刪除指定節點。

需要注意的一點是,雖然題目中已經說明 n 是有效數字,但是依舊有可能出現 fast 指針爲空的情況,即刪除第一個元素的時候。這個時候只需要返回 head->next 就可以了,之後就可以愉快的寫代碼了!

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
    if(head == NULL || head->next == NULL){
        return NULL;
    }

    struct ListNode* fast = head;
    struct ListNode* slow = head;

    for(int i = 0;i < n; i++){
        fast = fast->next;
    }

    if(!fast){
        return head->next;
    }

    while(fast->next){
        fast = fast->next;
        slow = slow->next;
    }

    slow->next = slow->next->next;
    return head;
}

 

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