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

题目来源:

leetcode题目,网址:19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

解题思路:

使用双指针找到倒数第 N+1 个节点后删除链表的第 N 个节点即可。注意当 N 为链表长度时,倒数第 N+1 个节点不存在,head->next 即为所求。

解题代码:

复制代码
/**
 * 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* lastNPlusOne=head;
        ListNode* lastOne=head;
        for(int i=0;i<n;i++){
            lastOne=lastOne->next;
        }
        if(lastOne==nullptr){
            return head->next;
        }
        while(lastOne->next!=nullptr){
            lastNPlusOne=lastNPlusOne->next;
            lastOne=lastOne->next;
        }
        lastNPlusOne->next=lastNPlusOne->next->next;
        return head;        
    }
};

总结:

官方题解新增了哑节点作为头节点以避免删除首个元素时的特殊判断。官方题解给出了三种解法。第一种是计算链表长度。两次遍历,第一次获得链表长度,第二次删除指定节点。第二种是栈,将所有元素入栈后,删去出栈时位于倒数第 N 个的节点。第三种是双指针。


相关推荐
顾温3 小时前
default——C#/C++
java·c++·c#
凉茶钱4 小时前
【c语言】动态内存管理:malloc,calloc,realloc,柔性数组
c语言·c++·vscode·柔性数组
脏脏a4 小时前
【C++模版】泛型编程:代码复用的终极利器
开发语言·c++·c++模版
island13144 小时前
【C++仿Muduo库#3】Server 服务器模块实现上
服务器·开发语言·c++
散峰而望4 小时前
【算法竞赛】C/C++ 的输入输出你真的玩会了吗?
c语言·开发语言·数据结构·c++·算法·github
小龙报4 小时前
【C语言】内存里的 “数字变形记”:整数三码、大小端与浮点数存储真相
c语言·开发语言·c++·创业创新·学习方法·visual studio
刃神太酷啦4 小时前
扒透 STL 底层!map/set 如何封装红黑树?迭代器逻辑 + 键值限制全手撕----《Hello C++ Wrold!》(23)--(C/C++)
java·c语言·javascript·数据结构·c++·算法·leetcode
2301_789015624 小时前
C++:继承
c语言·开发语言·c++
星河耀银海4 小时前
C++ 运算符重载:自定义类型的运算扩展
android·java·c++
feng_blog66884 小时前
C++线程池|解决死锁、崩溃、丢任务所有痛点
java·开发语言·c++