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

简介: 19. 删除链表的倒数第 N 个结点

题目描述

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

示例 1:

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

输出:[1,2,3,5]


示例 2:


输入:head = [1], n = 1


输出:[]


示例 3:


输入:head = [1,2], n = 1


输出:[1]


提示:


链表中结点的数目为 sz

1 <= sz <= 30

0 <= Node.val <= 100

1 <= n <= sz


进阶:你能尝试使用一趟扫描实现吗?


解题思路

首先是可以用遍历2遍的方法来求结果的。


第一遍遍历得到有多少个节点,就可以得到是正序的第几个节点。


我们不用上面的方法,我们用遍历一边的方法。


双指针的方法——快慢双指针


先让快指针走n步,然后快慢指针同时移动,当快指针走到空的时候,要删除的节点就是慢指针的下一个节点。


因为可能会删除头节点,所以我们设一个带头的节点。(为了方便处理)

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode* temp=new ListNode;
        temp->next=head;

        ListNode* f,*s;
        f=s=temp;
        //快指针先走
        for(int i=1;i<=n;i++) f=f->next;
        //一起走
        while(f->next)
        {
            f=f->next;
            s=s->next;
        }
        //删除
        ListNode* cur=s->next;
        s->next =cur->next;
        delete cur;
        //删除我们定义的头
        cur=temp->next;
        delete temp;
        //返回结果
        return cur;
    }
};
相关文章
|
1月前
|
算法
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
24 0
|
1月前
|
算法
19.删除链表的倒数第N个结点
19.删除链表的倒数第N个结点
|
11天前
|
机器学习/深度学习 存储
sdut pta 链表3(优化)-----7-3 sdut-C语言实验-链表的结点插入
sdut pta 链表3(优化)-----7-3 sdut-C语言实验-链表的结点插入
8 0
|
20天前
|
算法 C语言
【数据结构与算法 刷题系列】求链表的中间结点
【数据结构与算法 刷题系列】求链表的中间结点
|
1月前
|
SQL 算法 数据挖掘
力扣题目 19:删除链表的倒数第N个节点 【python】
力扣题目 19:删除链表的倒数第N个节点 【python】
|
1月前
|
算法
数据结构和算法学习记录——线性表之双向链表(下)-头插函数、头删函数、查找函数、pos位置之前插入结点、pos位置删除结点及其复用、销毁链表函数
数据结构和算法学习记录——线性表之双向链表(下)-头插函数、头删函数、查找函数、pos位置之前插入结点、pos位置删除结点及其复用、销毁链表函数
13 0
|
1月前
|
算法
数据结构和算法学习记录——习题-翻转链表(不带表头结点逆置算法、带表头结点的链表逆置算法)
数据结构和算法学习记录——习题-翻转链表(不带表头结点逆置算法、带表头结点的链表逆置算法)
16 0
|
2月前
题目----力扣--链表的中间结点
题目----力扣--链表的中间结点
14 0
|
2月前
查找两个链表的第一个公共结点
查找两个链表的第一个公共结点
22 0
|
2月前
|
索引
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
23 0