当前位置:网站首页>LeetCode 19:删除链表的倒数第 N 个结点
LeetCode 19:删除链表的倒数第 N 个结点
2022-08-03 23:50:00 【斯沃福德】
题目:
方法一:双指针
如果要删除倒数第n个节点,让fast移动n步,目的是拉开fast和slow之间的距离;
然后让fast和slow同时移动,直到fast指向链表末尾,此时slow就是要删除的节点!
最后fast为末尾节点的next即为null,slow就是要删除的节点node,而pre节点记录了node的前节点!
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
if(n<=0){
return head;
}
// 哨兵节点!
ListNode mer=new ListNode(-1);
mer.next=head;
ListNode fast=mer;
ListNode slow=mer;
//fast移动n次
for(int i=0;i<n;i++){
fast=fast.next;
}
ListNode pre=null;
while(fast!=null){
pre=slow;
// slow和fast一起移动,直到fast到末尾
slow=slow.next;
fast=fast.next;
}
// 删除
pre.next=slow.next;
return mer.next;
}
}
方法二:模拟
直接按情况分类计算;
排除k>size和k=size=1的特殊情况;
如果k=1且size>1,即删除最后一个节点;
如果k>1且k=size,即删除第一个,那么直接返回第二个节点即可;
而k>1且k<size时,将前驱节点指向要删除节点的next即完成删除;
class Solution {
public ListNode removeNthFromEnd(ListNode head, int k) {
Stack<ListNode> s=new Stack<>();
ListNode curr=head;
while(curr!=null){
s.push(curr);
curr=curr.next;
}
// base case
if(k>s.size() || k<=0){
return head;
}
if(k==1 && s.size()==1){
return null;
}
else if(k==1 && s.size()>1 ){
s.pop();
ListNode pre=s.pop();
pre.next=null;
}else if(k>1 && k==s.size()){
ListNode second=null;
for(int i=0;i<k-1;i++){
second=s.pop();
}
return second;
}else if(k>1 && k<s.size()){
ListNode front=null;
for(int i=0;i<k+1;i++){
front=s.pop(); // 前
}
front.next=front.next.next;
}
return head;
}
}
边栏推荐
- [RYU] rest_router.py source code analysis
- Code Casual Recording Notes_Dynamic Programming_416 Segmentation and Subsetting
- 1067 Sort with Swap(0, i)
- 超级完美版布局有快捷键,有背景置换(解决opencv 中文路径问题)
- 现货白银需要注意八大事项
- 【深度学习】基于tensorflow的服装图像分类训练(数据集:Fashion-MNIST)
- 初始 List 接口
- V8中的快慢数组(附源码、图文更易理解)
- Redis persistence method
- 做项目一定用得到的NLP资源【分类版】
猜你喜欢

Jar a key generation document database
![2022-08-03:以下go语言代码输出什么?A:2;B:3;C:1;D:0。 package main import “fmt“ func main() { slice := []i](/img/a9/6de3c2bae92d09b13b1c36e01f86c2.png)
2022-08-03:以下go语言代码输出什么?A:2;B:3;C:1;D:0。 package main import “fmt“ func main() { slice := []i

Scala基础【正则表达式、框架式开发原则】

POE交换机全方位解读(上)

Creo 9.0创建几何点

免费的公共WiFi不要乱连,遭中间人攻击了吧?

七夕活动浪漫上线,别让网络拖慢和小姐姐的开黑时间
![Scala basics [regular expressions, framework development principles]](/img/be/6531f32494b8516cd7031223d14bb2.png)
Scala basics [regular expressions, framework development principles]

小身材有大作用——光模块寿命分析(二)

Another MySQL masterpiece published by Glacier (send the book at the end of the article)!!
随机推荐
XSLT – 服务器端概述
射频芯片ATE测试从入门到放弃之参数测试
libnet
YOLOv7改进之二十二:涨点神器——引入递归门控卷积(gnConv)
2022-08-03:以下go语言代码输出什么?A:2;B:3;C:1;D:0。 package main import “fmt“ func main() { slice := []i
C语言实验十四 结构体
Creo 9.0创建几何点
POE交换机全方位解读(下)
关于mnn模型输出的数据杂乱无章问题
complete binary tree problem
2022/8/3 Exam Summary
代码重构:面向单元测试
- the skip/skipif Pytest learning
Shell 用法梳理总结
The super perfect layout has shortcut keys and background replacement
小身材有大作用——光模块基础知识(一)
End-to-End Lane Marker Detection via Row-wise Classification
3D 语义分割——2DPASS
牛客2022 暑期多校3 H Hacker(SAM + 线段树查询区间内部最大子段和)
Why Flutter Flutter of tutorials is the best choice for business?