Remove Nth Node From End of List

来源:互联网 发布:matlab 输出数组 编辑:程序博客网 时间:2024/06/05 16:20

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

算法:

用三个指针p,q,r,p指针作为前移指针,q指针指向倒数第n个元素的指针,r为q指针的前面一个元素的指针。起始时刻p指向head,让p和q之间的距离为n,这样当p指向链表末尾的时候,q自然指向的是倒数第n个元素。

代码:

/** * 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) {        int len = 0;        ListNode* p = head;        ListNode* q = p;        ListNode* r = q;        while(p!=nullptr)        {            if(n>0)            {                p = p->next;                --n;            }            else            {                r = q;                q=q->next;                p=p->next;            }        }        //此时删除的元素为第一个元素        if(r==q)        {            r = head->next;            delete head;            head =nullptr;            return r;        }        r->next = q->next;        delete q;        q=nullptr;        return head;    }};
0 0