菜鸟刷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即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章