Leetcode-19. Remove Nth Node From End of List

来源:互联网 发布:python web 框架 编辑:程序博客网 时间:2024/06/15 18:20

题目

删除链表的倒数第n个元素

思路

双指针p1, p2,p1先移动到链表的第n个元素,然后p1和p2一起移动,当p2到达末尾时,p1指向的元素即为要删除的元素的前一个元素。注意处理n大于链表长度的情况。

代码

解法1

class Solution {public:    ListNode* removeNthFromEnd(ListNode* head, int n) {        if(NULL==head || n<1) return head;        ListNode* p = head;        while(p) {            n--;            p = p->next;        }        if(n == 0)            return head->next;        if(n < 0) {            p = head;            while(++n)                p = p->next;            p->next = p->next->next;        }        return head;    }};

解法2

class Solution {public:    ListNode* removeNthFromEnd(ListNode* head, int n) {        if(NULL==head || n<1) return head;        ListNode *h = new ListNode(0);        h->next = head;        ListNode* p1 = h, *p2 = h;        for(int i=0; i<n && p1; i++, p1 = p1->next);        if(NULL == p1)            return head;        while(p1->next) {            p1 = p1->next;            p2 = p2->next;        }        p2->next = p2->next->next;        return h->next;    }};
0 0
原创粉丝点击