LeetCode#19 Remove Nth Node From End of List

来源:互联网 发布:kord机枪 知乎 编辑:程序博客网 时间:2024/06/06 04:16

key: two pointers, one runs fast than the other n+1 steps
Runtime: 4 ms / beats 37.25%
Reference:discuss

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* removeNthFromEnd(ListNode* head, int n) {        ListNode *s, *e;        s =  e = head;        int i;        for(i = 0; i < n+1 && e != NULL; i++)        {            e = e->next;        }        ListNode *temp;            if(i < n+1)        {            temp = head;            head = head->next;            free(temp);            return head;        }        while(e != NULL)        {            s = s->next;            e = e->next;        }        temp = s->next;        s->next = s->next->next;//ne        free(temp);        return head;    }};

Update: add a header to reduce complicate ‘if’ cases later
Reference:Editorial Solution

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* removeNthFromEnd(ListNode* head, int n) {        ListNode *s, *e, header(0);        header.next = head;        s =  e = &header;        for(int i = 0; i < n+1; i++)        {            e = e->next;        }        while(e != NULL)        {            e = e->next;            s = s->next;        }        ListNode *temp;        temp = s->next;        s->next = s->next->next;        free(temp);        return header.next;    }};
0 0
原创粉丝点击