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

来源:互联网 发布:中央财经大学知乎 编辑:程序博客网 时间:2024/06/07 06:53

我做的还是最简单粗暴的做法,因为想不出简单算法,也不知道怎么只用一个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即可。

0 0
原创粉丝点击