当前位置:网站首页>【LeetCode 19】删除链表的倒数第 N 个结点
【LeetCode 19】删除链表的倒数第 N 个结点
2022-04-21 06:20:00 【别偷我能量】
题目描述
给你一个链表,删除链表的倒数第 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个位置在链表中的正序的位置。但是遍历了两次链表。
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *p=head;
ListNode *r=head;
int i=0;
while(p){
//记录总的链表长度
i++;
p=p->next;
}
if(i==n){
//特殊情况 删除倒数的元素就是正序的第一个元素
head=head->next;
return head;
}
int j=i-n,k=1;// 倒数第N个元素在正序中第j个位置
while(k<j){
r=r->next;
k++;
}
p=r->next;//直接进行覆盖
r->next=p->next;
return head;
}
2.利用快慢指针(双指针)遍历,先用快指针先前进N个节点,然后快和慢指针一起移动,直到快指针遍历到最后一个节点,此时的慢指针就是倒数第N+1个节点。
N + X =Length
// N就是快指针一开始走自己的步数,X表示后面快慢指针一起走的步数。
//慢指针只走了X步,还有N步没有走完,也就是走到了倒数第N+1个节点。
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *pre=new ListNode(0);//设置一个虚节点
pre->next=head;
ListNode* fast=pre;//快指针
ListNode* slow=pre;//慢指针
while(n--){
//先让快指针走N步
fast=fast->next;
}
while(fast->next){
//快慢指针一起走
slow=slow->next;
fast=fast->next;
}
ListNode* tmp=slow->next;//养成一个好习惯释放节点
slow->next=slow->next->next;
delete tmp;//养成一个好习惯释放节点
return pre->next;//注意返回的表示
}
别看上面有两个while就是遍历了两次,仔细看快指针只遍历了一次,当然也可以放在一个while里,写的目的是方便读者理解。
版权声明
本文为[别偷我能量]所创,转载请带上原文链接,感谢
https://blog.csdn.net/mitongxue/article/details/124238759
边栏推荐
- [ksz8863] information summary and board verification results of ksz8863 switch chip
- Tensorflow实例3: 验证码图片的识别训练,每张图片有4个字母
- 3-1.pod控制器
- Tensorflow基础0:文件的读取与存储
- 什么是PaaS?平台即服务介绍
- 【ThreadX】H743+ThreadX+FileX移植记录
- TP下载文件夹,压缩文件夹并下载
- [STM32] cubemx configuration diagram of 480mhz clock under 25MHz external crystal oscillator of h743
- 微服务架构下的数据库拆分
- Code implementation of feature pyramid transformer
猜你喜欢

php初级程序员,接单,挣外快的指导方法

【STM32】H743的25MHZ外部晶振下480MHz时钟的CubeMX配置图

Chapter 5 support vector machine (SVM)

搭建自己的blog

语义的特征提取及简单词频展示(WordCloud)

Official account version update and introduction

STM32 H743 ECC内存相关使用说明笔记

毕业设计,疫情心理咨询系统截图查看

How to download and use the journal latex template

Remember some commonly used r packages
随机推荐
使用zk实现分布式锁原理代码浅析
QThread简单测试理解
【ThreadX】H743ZI+LAN8720+ThreadX+NetX Duo移植
【SSM整合】1. 基本环境搭建
Chapter 5 support vector machine (SVM)
Simultaneous access of computer intranet and extranet - solution
Build your own blog
3. 事务和视图
3-1. Pod controller
跨域问题-Allow-Origin header contains multiple values... but only one is allowed
Implémenter un tableau en tant que fonction JS. Prototype. Foreach (),. Map (),. Filtre ()
Draw biaxial separation diagram with ggplot2
第五章 支持向量机(SVM)
用JS函數形式實現一個Array.prototype.forEach(),.map(),.filter()
JDBC simple implementation of student management system
做一款自己的小程序
[LabVIEW] record some pits in LabVIEW project
Reproduce the 3D density function diagram in the top issue of SCI
[WPF] notes
There is no prompt for importing JSTL tag library URI