【LeetCode】19. Remove Nth Node From End of List C語言

LeetCode 解題心得,歡迎交流!

原題:給定鏈表,從列表的末尾刪除第n個節點並返回其頭。


解題思路:關鍵是如何找到倒數第n個節點,定義兩個指針fast和slow,讓fast先走n步,
然後讓fast和slow一起走,直到fast走到鏈表結尾,此時,slow指向倒數第n個節點的前一個節點,
然後,slow->next=slow->next->next,就可以跳過倒數第n個節點了,相當於刪除了倒數第n個節點。


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
    struct ListNode *fast=head;
    struct ListNode *slow=head;
    int i;
    for(i=0;i<n;i++)
    {
        fast=fast->next;
        if(fast == NULL) return head->next; 
    }
    while(fast->next != NULL)
    {
        fast=fast->next;
        slow=slow->next;
    }
    slow->next=slow->next->next;
    return head;
}



注意細節:怎麼樣走到第n-1個節點,你要注意題目已經告訴我們要刪除的節點數是有效的,
所以,我們不必考慮萬一要刪除的節點數大於節點總數。如果要刪除的節點爲頭結點怎麼辦,

有一個小的細節必須注意,如果要刪除的節點是頭結點,那麼此時的fast肯定到了鏈表尾,所以我們只需要返回return head->next即可
if(fast == NULL) return head->next; 



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