《力扣》链表 | 19. 删除链表的倒数第 N 个结点 C++题解

19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

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

示例 1:

《力扣》链表 | 19. 删除链表的倒数第 N 个结点 C++题解_第1张图片

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

好神奇的解法,有股相对运动的赶脚

双指针:a,b(同时指向头节点)

1.先让a指针移动n个节点

2.然后a,b一起移动,当a移动到末尾的时候,b就恰好移动到倒数第n个数

也就是我们通过a指针限制b只能移动(len-n)个节点(带头节点)

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode* pre=new ListNode();  // 创建有头节点的链表,方便代码编写
        pre->next=head;
        ListNode* first=pre;
        ListNode* second=pre;
        for(int i=1;i<=n;i++){
            first=first->next;
        }
        while(first->next!=nullptr){
            second=second->next;
            first=first->next;
        }
        second->next=second->next->next;
        return pre->next;
    }
};

你可能感兴趣的:(算法,数据结构,链表,c++,leetcode)