给定一个链表,删除链表的倒数第 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个节点相关推荐

  1. [链表|多解法] leetcode 19 删除链表的倒数第N个节点

    [链表|多解法] leetcode 19 删除链表的倒数第N个节点 1.题目 题目链接 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2-&g ...

  2. 【亡羊补牢】挑战数据结构与算法 第59期 LeetCode 19. 删除链表的倒数第N个节点(链表)

    仰望星空的人,不应该被嘲笑 题目描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. ...

  3. leetcode 19. 删除链表的倒数第N个节点(双指针)

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ...

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

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ...

  5. [leetcode]19.删除链表的倒数第N个节点

    给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 进阶:你能尝试使用一趟扫描实现吗? 示例 1: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] ...

  6. LeetCode 19删除链表的倒数第N个节点-中等

    给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 进阶:你能尝试使用一趟扫描实现吗? 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2: ...

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

    原题链接 解法:双指针 思路:第一个点可以能被删除,所以需要一个虚拟头节点.被删除的点位于倒数第n的位置,因为是单链表,即找到倒数n + 1最后,想要删除这个节点必须要保留它的前一个节点使其p-> ...

  8. C++ leetcode 19. 删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

    一.思路: 遍历一遍存储节点到vector数组中,然后利用数组指向倒数第n个,将倒数n-1的节点的next指向倒数n的next 二.代码: class Solution { public:ListNo ...

  9. Leetcode算法Java全解答--19. 删除链表的倒数第N个节点

    Leetcode算法Java全解答–19. 删除链表的倒数第N个节点 文章目录 Leetcode算法Java全解答--19. 删除链表的倒数第N个节点 题目 想法 结果 总结 代码 我的答案 大佬们的 ...

  10. 领扣(LeetCode)删除链表的倒数第N个节点 个人题解

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1 ...

最新文章

  1. R语言构建logistic回归模型并评估模型:计算混淆矩阵、并基于混淆矩阵计算Accuray、Precision、Recall(sensitivity)、F1、Specificity指标
  2. AngularJS2.0 hello world例子——引入这么多额外的依赖库真是很忧伤啊
  3. poj 3275 Ranking the Cows 搜索
  4. 手写的奇怪vector
  5. 网页没有横向滚动条_【第四课】网页里的表单
  6. Python 第十一篇:开发堡垒机
  7. js动态改变iframe的src属性
  8. c语言链表做歌手比赛系统,大型实验报告(歌手比赛系统)
  9. 相机模型与标定(三)--张正友标定
  10. VC9.VC10.VC11...各对应什么版本的VS,以及含义
  11. SSM房屋租赁管理系统
  12. centos7配置ip
  13. 微信小程序生成二维码最新版
  14. 重标极差分析法matlab,重标极差(RS)分析法估计Hurst指数的有效性检验.doc
  15. 七月观荷 - 江湖一剑客
  16. oracle procmpt,oracle ebs 接口程序
  17. Albumentations 中的空间级图像变换
  18. [ZT]系统学习Linux的11点建议
  19. matlab park clark,[转载]park,clark和ipark浅析
  20. 霍尔开关在移动充电宝中的应用

热门文章

  1. LintCode 633. 寻找重复的数(这个题要复习)
  2. 剑指Offer - 面试题11. 旋转数组的最小数字(二分查找)
  3. LeetCode 152. 乘积最大子序列(DP)
  4. php怎么获取分类数,php 两种获取分类树的方法
  5. 从零开始,手把手交给你vue如何新建一个项目
  6. python中的生产者与消费者模式
  7. python编程书籍1020python编程书籍_从零单排之玩转Python安全编程(II)
  8. AI Challenger 2018:细粒度用户评论情感分析冠军思路总结
  9. 玩转算法面试-第四章查找值之leetcod相关笔记
  10. Android官方开发文档Training系列课程中文版:后台服务之响应IntentService的处理结果