Leetcode--19. 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
快慢指针法
一次遍历就可以完成,我运用了三个指针来完成
刚开始,第一个p,第二个r指针指向第一个节点,第三个指针q指向第n-1个节点
之后第一个指针,第三个指针向后移动,第二个指针指向第一个指针的前一个节点(一会方便删除)
当第三个指针q的下一个指向为空时,说明第一个指针p所指向的节点就是需要删除的节点
那么r.next = r.next.next就可以直接删除
可以直接提交的代码:
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode p,q,r;
p = head;
q = head;
r = p;
int i;
if(head.next==null)
{
head = null;
return head;
}
for(i=1;i<n;i++)
{
q = q.next;
}
if(q.next==null)
{
head = head.next;
}
while(q.next!=null)
{
r = p;
p = p.next;
q = q.next;
}
r.next = r.next.next;
return head;
}
}
完整代码:
package Solution19;
public class Solution19 {
public static ListNode removeNthFromEnd(ListNode head, int n) {
ListNode p,q,r;
p = head;
q = head;
r = p;
int i;
if(head.next==null)
{
head = null;
return head;
}
for(i=1;i<n;i++)
{
q = q.next;
}
if(q.next==null)
{
head = head.next;
}
while(q.next!=null)
{
r = p;
p = p.next;
q = q.next;
}
r.next = r.next.next;
return head;
}
public static void main(String[] args)
{
ListNode head = new ListNode(1);
ListNode p = head;
ListNode q = new ListNode(2);
p.next = q;
p = q;
q = new ListNode(3);
p.next = q;
p = q;
q = new ListNode(4);
p.next = q;
p = q;
q = new ListNode(5);
p.next = q;
p = q;
p.next = null;
head = removeNthFromEnd(head,2);
while(head!=null)
{
System.out.println(head.val);
head = head.next;
}
}
}
Leetcode--19. 删除链表的倒数第N个节点相关推荐
- [链表|多解法] leetcode 19 删除链表的倒数第N个节点
[链表|多解法] leetcode 19 删除链表的倒数第N个节点 1.题目 题目链接 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2-&g ...
- 【亡羊补牢】挑战数据结构与算法 第59期 LeetCode 19. 删除链表的倒数第N个节点(链表)
仰望星空的人,不应该被嘲笑 题目描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. ...
- leetcode 19. 删除链表的倒数第N个节点(双指针)
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ...
- leetcode —— 19. 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ...
- [leetcode]19.删除链表的倒数第N个节点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 进阶:你能尝试使用一趟扫描实现吗? 示例 1: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] ...
- LeetCode 19删除链表的倒数第N个节点-中等
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 进阶:你能尝试使用一趟扫描实现吗? 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2: ...
- Leetcode 19. 删除链表的倒数第N个节点
原题链接 解法:双指针 思路:第一个点可以能被删除,所以需要一个虚拟头节点.被删除的点位于倒数第n的位置,因为是单链表,即找到倒数n + 1最后,想要删除这个节点必须要保留它的前一个节点使其p-> ...
- C++ leetcode 19. 删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
一.思路: 遍历一遍存储节点到vector数组中,然后利用数组指向倒数第n个,将倒数n-1的节点的next指向倒数n的next 二.代码: class Solution { public:ListNo ...
- Leetcode算法Java全解答--19. 删除链表的倒数第N个节点
Leetcode算法Java全解答–19. 删除链表的倒数第N个节点 文章目录 Leetcode算法Java全解答--19. 删除链表的倒数第N个节点 题目 想法 结果 总结 代码 我的答案 大佬们的 ...
- 领扣(LeetCode)删除链表的倒数第N个节点 个人题解
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1 ...
最新文章
- R语言构建logistic回归模型并评估模型:计算混淆矩阵、并基于混淆矩阵计算Accuray、Precision、Recall(sensitivity)、F1、Specificity指标
- AngularJS2.0 hello world例子——引入这么多额外的依赖库真是很忧伤啊
- poj 3275 Ranking the Cows 搜索
- 手写的奇怪vector
- 网页没有横向滚动条_【第四课】网页里的表单
- Python 第十一篇:开发堡垒机
- js动态改变iframe的src属性
- c语言链表做歌手比赛系统,大型实验报告(歌手比赛系统)
- 相机模型与标定(三)--张正友标定
- VC9.VC10.VC11...各对应什么版本的VS,以及含义
- SSM房屋租赁管理系统
- centos7配置ip
- 微信小程序生成二维码最新版
- 重标极差分析法matlab,重标极差(RS)分析法估计Hurst指数的有效性检验.doc
- 七月观荷 - 江湖一剑客
- oracle procmpt,oracle ebs 接口程序
- Albumentations 中的空间级图像变换
- [ZT]系统学习Linux的11点建议
- matlab park clark,[转载]park,clark和ipark浅析
- 霍尔开关在移动充电宝中的应用
热门文章
- LintCode 633. 寻找重复的数(这个题要复习)
- 剑指Offer - 面试题11. 旋转数组的最小数字(二分查找)
- LeetCode 152. 乘积最大子序列(DP)
- php怎么获取分类数,php 两种获取分类树的方法
- 从零开始,手把手交给你vue如何新建一个项目
- python中的生产者与消费者模式
- python编程书籍1020python编程书籍_从零单排之玩转Python安全编程(II)
- AI Challenger 2018:细粒度用户评论情感分析冠军思路总结
- 玩转算法面试-第四章查找值之leetcod相关笔记
- Android官方开发文档Training系列课程中文版:后台服务之响应IntentService的处理结果