删除链表的倒数第N个节点

题目:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

本题需要使用双指针,需要注意的点:
1、双指针都指向头结点
2、快指针提前移动n+1个点
3、结束条件:快指针指向空指针
4、慢指针指向要删除结点的前一个结点
5、删除结点时需要创建一个临时结点,然后释放
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode* dummyHead = new ListNode(0);
        dummyHead->next=head;
        ListNode* fast=dummyHead;
        ListNode* slow=dummyHead;

        while( n+1 &&fast!=NULL)
        {
            fast=fast->next;
            n--;
        }

        while(fast!=NULL)
        {
            fast=fast->next;
            slow=slow->next;
        }

        ListNode* tmp=slow->next;
        slow->next=slow->next->next;
        delete tmp;

        return dummyHead->next;

    }
};

 

posted @ 2023-04-26 20:23  该说不唠  阅读(27)  评论(0)    收藏  举报