删除链表的倒数第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]

思路1:暴力遍历

很简单的遍历完链表,一边遍历一边计数n,删除倒数第N个结点,即删除正数第n-N+1个结点。

代码实现:
 

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
int getlen(struct ListNode* head){int lenth=0;while(head){head=head->next;lenth++;}return lenth;
}
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {struct ListNode* dummy=malloc(sizeof(struct ListNode));dummy->val=0;dummy->next=head;struct ListNode* cur=dummy;int len=getlen(head);for(int i=0;i<len-n;i++){cur=cur->next;}cur->next=cur->next->next;struct ListNode* ans=dummy->next;free(dummy);return ans;
}

思路2:递归

链表天生自带的递归性质在这个简单条件面前自然也可以使用,在无法知道链表结点数的情况下,我们就自然无法在递的上面做文章,自然而然就只能在归的过程中进行计数,归一次就计数N++

代码实现:
 

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {static int N;//这里比较特别的一点就是我们使用静态变量,作用是在不同的归的栈中使得变量不改变while(!head){N=0;return head;}head->next=removeNthFromEnd(head->next, n);N++;if(N==n){struct ListNode* tmp=head->next;free(head);return tmp;}return head;
}

思路3:双指针

第一个暴力遍历的效率不高的一大原因就是因为遍历的次数重复了一次,增添一个指针自然可以渐少一次遍历,利用前后指针的范围差,准确的确定倒数第N个结点的所在处

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {struct ListNode* dummy=malloc(sizeof(struct ListNode));dummy->val=0;dummy->next=head;struct ListNode* pre=dummy;struct ListNode* cur=dummy;for(int i=0;i<n-1;i++){cur=cur->next;}while(cur->next->next){pre=pre->next;cur=cur->next;}pre->next=pre->next->next;struct ListNode* tmp=dummy->next;free(dummy);return tmp;
}

思路4:栈

用栈来装下所有的结点,再一步一步出栈。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/struct STACK{struct ListNode* val;struct STACK* next;};
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {struct ListNode* dummy=malloc(sizeof(struct ListNode));dummy->val=0;dummy->next=head;struct STACK* stk=NULL;struct ListNode* cur=dummy;while(cur){struct STACK* tmp=malloc(sizeof(struct STACK));tmp->val=cur;tmp->next=stk;stk=tmp;cur=cur->next;}for(int i=0;i<n;i++){struct STACK* tmp=stk->next;free(stk);stk=tmp;}struct ListNode* pre=stk->val;pre->next=pre->next->next;struct ListNode* ans=dummy->next;free(dummy);return ans;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/210613.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rsyslog学习

rsyslog是什么 RSYSLOG&#xff08;Remote System Logging&#xff09;是一个开源的日志处理工具&#xff0c;用于在 Linux 和 Unix 系统上收集、处理和转发日志。它是一个健壮且高性能的日志处理程序&#xff0c;可以替换 Syslogd 作为标准的系统日志程序。RSYSLOG 提供了许多…

一文掌握 Spring Boot 常用注解,保姆级整理,建议收藏!

亲兄弟篇&#xff1a; SpringBoot注解大全&#xff08;超详细&#xff09;_Maiko Star的博客-CSDN博客 一、SpringBoot常用注解 二、Bean处理注解 2.1 Resource 依赖注入&#xff0c;自动导入标注的对象到当前类中&#xff0c;比如我们的 Controller 类通常要导入 Service 类…

安全牛《数据分类分级自动化建设指南》发布|美创入选代表厂商,分享智能化探索

近日&#xff0c;安全牛发布《数据分类分级自动化建设指南》研究报告&#xff0c;对数据分类分级的主要技术、实施要点、选型指导、发展趋势等展开深入探讨&#xff0c;为各行业数据分类分级自动化工作落地提供帮助与指引。 美创科技被列为代表推荐厂商&#xff0c;落地案例—农…

Python版本切换的解决方法,升级Python 2.7 到 Python 3.7

之前解决问题的时候&#xff0c;记录的一个Python版本切换的解决方法&#xff0c;今天在解决其他问题的时候&#xff0c;查看了下之前写的这个解决方法。还是很适用的。然后加入了下linux系统中python配置修改的问题。 Mac 升级Python 2.7 到 Python 3.7 1、python3.7官网下载…

【鸿蒙应用ArkTS开发系列】- 云开发入门实战二 实现省市地区联动地址选择器组件(上)

目录 概述 云数据库开发 一、创建云数据库的对象类型。 二、预置数据&#xff08;为对象类型添加数据条目&#xff09;。 三、部署云数据库 云函数实现业务逻辑 一、创建云函数 二、云函数目录讲解 三、创建resources目录 四、获取云端凭据 五、导出之前创建的元数据…

推荐一款png图片打包plist工具pngPackerGUI_V2.0

png图片打包plist工具&#xff0c;手把手教你使用pngPackerGUI_V2.0 此软件是在pngpacker_V1.1软件基础之后&#xff0c;开发的界面化操作软件&#xff0c;方便不太懂命令行的小白快捷上手使用。1.下载并解压缩软件&#xff0c;得到如下目录&#xff0c;双击打开 pngPackerGUI.…

Leetcode—1410.HTML实体解析器【中等】

2023每日刷题&#xff08;三十八&#xff09; Leetcode—1410.HTML实体解析器 算法思想 实现代码 typedef struct entityChar {char* entity;char rechar; }entity;entity matches[] {{"&quot;", "},{"&apos;", \},{"&amp;"…

编写自己的CA和TA与逆向

参考内容《手机安全和可信应用开发》 https://note.youdao.com/s/MTlG4c1w 介绍 TA的全称是Trust Application&#xff0c; 即可信任应用程序。 CA的全称是Client Applicant&#xff0c; 即客户端应用程序。 TA运行在OP-TEE的用户空间&#xff0c; CA运行在REE侧。 CA执行时代…

2023亚太杯数学建模竞赛C题新能源电动汽车数据分析与代码讲解

C题论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1模型的建立和求解、问题2模型的建立和求解、问题3模型的建立和求解、问题4模型的建立和求解、问题5模型的建立和求解&#xff09;、模型的评价等等&#xff0c; 视频讲解如下&…

2.4G射频收发芯片 XL2407P芯片介绍,集成九齐单片机

XL2407P芯片是工作在2.400~2.483GHz世界通用ISM频段,集成微控制器的的SOC无线收发芯片。该芯片集成射频收发机、频率收生器、晶体振荡器、调制解调器等功能模块,并且支持一-对多组网和带ACK的通信模式。发射输出功率、工作频道以及通信数据率均可配置。 芯片内含以EPROM作为内…

PHP反序列化简单使用

注&#xff1a;比较简陋&#xff0c;仅供参考。 编写PHP代码&#xff0c;实现反序列化的时候魔法函数自动调用计算器 PHP反序列化 serialize(); 将对象序列化成字符串 unserialize(); 将字符串反序列化回对象 创建类 class Stu{ public $name; public $age; public $sex; publi…

VSCode插件koroFileHeader的使用。

文章目录 前言一、koroFileHeader是什么&#xff1f;二、使用步骤1.安装1.配置2.食用 前言 今天的天气还不错&#xff0c;真是金风玉露一相逢&#xff0c;便胜却人间无数&#xff0c;写篇博客玩玩&#xff0c;主题&#xff1a;注释。注释的本质就是对代码的解释和说明&#xf…