菜鳥刷leetcode 19. Remove Nth Node From End of List

我做的還是最簡單粗暴的做法,因爲想不出簡單算法,也不知道怎麼只用一個loop。。

於是用c,

struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
    struct ListNode* H;
    H=head;
    int len=1;
    while(H->next!=NULL)
    {
        len++;
        H=H->next;
    }
    int pos=len-n,num=1;
    if(n==len)
    {
        head=head->next;
        return head;
    }
    H=head;
    while(num!=pos)
    { 
        num++;
        H=H->next;
       
    }
    H->next=H->next->next;
    return head;
    
}
然後看了discuss,發現巧妙的辦法,用兩個指針,通過他們之間的差值來確定。

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        if (!head) return head;
        ListNode dummy(0), * t = &dummy, *s = &dummy;
        dummy.next = head;
        while (t && t->next) {
            if (n-- <= 0) s = s->next;
            t = t->next;
        }
        s->next = s->next->next;
        return dummy.next;
    }
};

ps,以後寫鏈表的程序,最好先定義一個頭指針,即

ListNode dummy(0),*t=&dummy;
dummy.next=head;
然後最後返回值爲dummy.next即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章