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

题目:
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
进阶:你能尝试使用一趟扫描实现吗?
在这里插入图片描述
思路:快慢指针,快指针先走n步,然后一起到结尾,慢指针所指的即为倒数第n个节点。

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        //if(head == nullptr || head->next == nullptr) return head;
        ListNode *vcur = new ListNode(0);
        vcur->next = head;
        ListNode*cur = vcur;//快指针
        ListNode*pre = vcur;//慢指针

        while(cur != nullptr && n--)//快指针先走n步
        {
            cur = cur->next;
        }
        cur = cur->next;//fast再提前走一步,因为需要让slow指向删除节点的上一个节点
        while(cur != nullptr)
        {
            cur = cur->next;
            pre = pre->next;
        }
        pre->next = pre->next->next;

        return vcur->next;

    }
};
posted @ 2021-10-19 20:13  simonlma  阅读(11)  评论(0)    收藏  举报