Leetcode19删除链表的倒数第N个结点

尝试只用一趟扫描实现
注意点:不能用malloc 要用new ListNode
为什么要建立头结点 是因为当单链表只有一个结点的时候
例如单链表只有1 n=1 代表单链表清空 所以要设置头结点
倒数第n个结点 可以利用一个指针先行后移动n位 再一起移动
有个问题是如果是1 2 3 4 5 n=6 的情况下应该返回的是1 2 3 4 5,也就是说并不删除结点,因为没有倒数第6个结点
而题解测试时会返回2 3 4 5.

ListNode* removeNthFromEnd(ListNode* head, int n) {
    ListNode *a = new ListNode(0);
    a->next = head;
    ListNode *r = a;
    ListNode *p = a;
    ListNode *q = a;
    while(n--)
    {
        p = q->next;
        q = q->next;
    }
    if(p == nullptr)
    {
        return head;
    }
    else
    {
        while(p->next)
        {
            p = p->next;
            r = r->next;
        }
    }
    r->next = r->next->next;
    return a->next;
}
posted @ 2020-07-12 19:24  Akmf's_blog  阅读(66)  评论(0)    收藏  举报