基本问题

如何删除单链表中的倒数第n个节点?

常规解法

先遍历一遍单链表,计算出单链表的长度,然后,从单链表头部删除指定的节点。

代码实现

  1. /**
  2. *
  3. * Description: 删除单链表倒数第n个节点,常规解法.
  4. *
  5. * @param head
  6. * @param n
  7. * @return ListNode
  8. */
  9. public static ListNode removeNthFromEnd(ListNode head, int n) {
  10. if (head == null)
  11. return null;
  12. //get length of list
  13. ListNode p = head;
  14. int len = 0;
  15. while (p != null) {
  16. len++;
  17. p = p.next;
  18. }
  19. //if remove first node
  20. int fromStart = len - n + 1;
  21. if (fromStart == 1)
  22. return head.next;
  23. //remove non-first node
  24. p = head;
  25. int i = 0;
  26. while (p != null) {
  27. i++;
  28. if (i == fromStart - 1) {
  29. p.next = p.next.next;
  30. }
  31. p = p.next;
  32. }
  33. return head;
  34. }

一次遍历法

使用快慢指针。快指针比慢指针提前n个单元。当快指针到达单链表尾部时,慢指针指向待删除节点的前节点。

代码实现

  1. /**
  2. *
  3. * Description: 删除单链表倒数第n个节点,快慢指针法.
  4. *
  5. * @param head
  6. * @param n
  7. * @return ListNode
  8. */
  9. public static ListNode removeNthFromEnd(ListNode head, int n) {
  10. if (head == null)
  11. return null;
  12. ListNode fast = head;
  13. ListNode slow = head;
  14. for (int i = 0; i < n; i++) {
  15. fast = fast.next;
  16. }
  17. //if remove the first node
  18. if (fast == null) {
  19. head = head.next;
  20. return head;
  21. }
  22. while (fast.next != null) {
  23. fast = fast.next;
  24. slow = slow.next;
  25. }
  26. slow.next = slow.next.next;
  27. return head;
  28. }

删除单链表倒数第n个节点的更多相关文章

  1. 【链表问题】打卡2:删除单链表的第 K个节点

    前言 以专题的形式更新刷题贴,欢迎跟我一起学习刷题.每道题会提供简单的解答. 题目描述 在单链表中删除倒数第 K 个节点 要求 如果链表的长度为 N, 时间复杂度达到 O(N), 额外空间复杂度达到 ...

  2. leetcode 去除单链表倒数第k个节点

    Given a linked list, remove the n-th node from the end of list and return its head. Example: Given l ...

  3. 单链表倒数第K个节点的查找和显示

    1.使用一个固定长度队列装链表段,当遍历到链表根时,返回队列头元素. class Node{ int value; Node next; public Node(int value){ this.va ...

  4. 19. Remove Nth Node From End of List【Medium】【删除单链表倒数第n个结点】

    Given a linked list, remove the n-th node from the end of list and return its head. Example: Given l ...

  5. lintcode :nth to Last Node In List 链表倒数第n个节点

    题目: 链表倒数第n个节点 找到单链表倒数第n个节点,保证链表中节点的最少数量为n. 样例 给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1. ...

  6. 链表倒数第n个节点

    找到单链表倒数第n个节点,保证链表中节点的最少数量为n. 样例 给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1. /** * Definiti ...

  7. lintcode166 链表倒数第n个节点

    链表倒数第n个节点 找到单链表倒数第n个节点,保证链表中节点的最少数量为n. 思路:设置两个指针first,second指向head,first指针先向前走n,然后两个指针一起走,first指针走到末 ...

  8. LintCode 链表倒数第n个节点

    找到单链表倒数第n个节点,保证链表中节点的最少数量为n. 样例 给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1. 分析:设两个指针 p1和p2 ...

  9. Leetcode算法系列(链表)之删除链表倒数第N个节点

    Leetcode算法系列(链表)之删除链表倒数第N个节点 难度:中等给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点.示例:给定一个链表: 1->2->3->4-&g ...

随机推荐

  1. 转 如何理解 重要性采样(importance sampling)

    分类: 我叫学术帖2011-03-25 13:22 3232人阅读 评论(4) 收藏 举报 图形 重要性采样是非常有意 思的一个方法.我们首先需要明确,这个方法是基于采样的,也就是基于所谓的蒙特卡洛法 ...

  2. 利用decorator和descriptor进行数据缓存

    class cached_property(object): def __init__(self, func, name=None, doc=None): self.__name__ = name o ...

  3. url rewrite

    http://www.microsoft.com/taiwan/technet/iis/expand/URLRewrite.aspx http://www.iis.net/learn/extensio ...

  4. C#连接mysql数据库插入数据后获取自增长主键ID值

    From: http://blog.csdn.net/zbc496218/article/details/51082983 MySqlConnection conn = new MySqlConnec ...

  5. 个性化EDM数据营销的三大提醒

    EDM数据营销行业已经进入个性化时代.但是怎样实现个性化仍然是一个重大课题.国内领先的智能化邮件营销服务商Focussend一直致力于探索和研究邮件营销领域的先进知识和做法,旨在为企业和个人提供更多有 ...

  6. Sublime Text3 插件集合

    下载地址:http://download.csdn.net/detail/yinluhui/9029791 [包含的插件有: AndyJS2.BracketHighlighter.emmet-subl ...

  7. rspec+rest-client测试第三方web service

    如果你手工测试Restful 服务将会是一件非常单调乏味的事情.当然,目前有一些浏览器插件可以通过可视化的界面帮助你手工测试,例如postman.rest console,但是每次系统版本更新,你都需 ...

  8. Android加载SO库UnsatisfiedLinkError错误的原因及解决方案

    Android 应用开发者应该对 UnsatisfiedLinkError 这种类型的错误比较熟悉了,这个问题一直困扰着广大的开发者,那么有没有想过有可能你什么都没做错,也会出现这个问题呢? 我们在 ...

  9. 封装系统自带的Debug

    Unity3d的Debug.Log函数用于打印日志,一般项目中都会对其作如下两件事情: (1)希望有一个总的开关来控制整个游戏中日志的打印与否: (2)有的系统会将Log封一层并添加统一的标记,比如S ...

  10. [Python] Basic operations in Pycharm

    From: http://learnpythonthehardway.org/book Comment with line comment: Ctrl + slash Run: Shift + F10 ...