题目描述

输入一个链表,输出该链表中倒数第k个结点。

题目地址

https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&tqId=11167&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

思路

三个特例:如果输入的链表为空;k大于链表的长度;k为0的情况。对于正常情况,设置两个指针分别指向头结点,第一个指针向前走k-1步,走到正数第k个结点,同时保持第二个指针不动,然后第一个指针和第二个指针每次同时前移一步,这样第一个指针指向尾结点的时候,第二个指针指向倒数第k个结点。判断尾结点的条件是 p.next == None。

Python

  1. # -*- coding:utf-8 -*-
  2. class ListNode:
  3. def __init__(self, x):
  4. self.val = x
  5. self.next = None
  6.  
  7. # 单向链表链表 node1: 1->2->3
  8. node1 = ListNode(1)
  9. node2 = ListNode(2)
  10. node3 = ListNode(3)
  11. node4 = ListNode(4)
  12. node1.next = node2
  13. node2.next = node3
  14. node3.next = node4
  15.  
  16. class Solution:
  17. def FindKthToTail(self, head, k):
  18. if not head or k <= 0:
  19. # 链表为空或k小于等于0
  20. return None
  21. p = head
  22. q = head
  23. for i in range(1,k):
  24. if p.next == None:
  25. # k大于链表的长度
  26. return None
  27. else:
  28. p = p.next
  29. while p.next:
  30. p = p.next
  31. q = q.next
  32. return q
  33.  
  34. if __name__ == '__main__':
  35. originList = node1
  36. print('链表:',end = ' ')
  37. while originList:
  38. print(originList.val, end = ' ')
  39. originList = originList.next
  40. k = 5
  41. result = Solution().FindKthToTail(node1,k)
  42. print('\n倒数第{0}个结点:'.format(k),end = ' ')
  43. while result:
  44. print(result.val,end = ' ')
  45. result = result.next


推广: 寻找中间节点, 两个指针一起, 第一个指针每次走两步, 第二个指针每次走一步, 快指针指到尾部, 慢指针正好指到中间

  1. def FindMidNode(self,head):
  2. """
  3. 推广: 寻找中间节点, 两个指针一起,
  4. 第一个指针每次走两步, 第二个指针每次走一步,
  5. 快指针指到尾部, 慢指针正好指到中间
  6. """
  7. if not head:
  8. return None
  9. p = head
  10. q = head
  11. p = p.next
  12. while p:
  13. p = p.next
  14. if p:
  15. p = p.next
  16. q = q.next
  17. return q
  18.  
  19. mid = Solution().FindMidNode(node1)
  20. print('\n中间结点:',end = ' ')
  21. while mid:
  22. print(mid.val, end = ' ')
  23. mid = mid.next

剑指Offer 14. 链表中倒数第k个结点 (链表)的更多相关文章

  1. [剑指Offer]22-链表中倒数第k个结点

    题目链接 https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&tqId=11167&t ...

  2. 剑指offer 14. 链表中倒数第 k 个结点

    14. 链表中倒数第 k 个结点 题目描述 输入一个链表,输出该链表中倒数第k个结点 法一:快慢指针 快指针先走 k 步,等快指针到达尾部时,慢指针所指结点即是倒数第 k 个结点 public cla ...

  3. 《剑指offer》— JavaScript(14)链表中倒数第k个结点

    链表中倒数第k个结点 题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路 两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指正走(k-1)步,到达第k个节点: 然后两个指针同时 ...

  4. 【剑指Offer】14、链表中倒数第k个结点

      题目描述:   输入一个链表,输出该链表中倒数第k个结点.为了符合习惯,从1开始计数,即链表的尾结点是倒数第1个节点.例如,一个链表有6个结点,从头结点开始,它们的值依次是1,2,3,4,5,6. ...

  5. 【Java】 剑指offer(22) 链表中倒数第k个结点

    正文 本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的 ...

  6. 剑指Offer:面试题15——链表中倒数第k个结点(java实现)

    问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...

  7. 剑指Offer - 九度1517 - 链表中倒数第k个结点

    剑指Offer - 九度1517 - 链表中倒数第k个结点2013-11-30 02:57 题目描述: 输入一个链表,输出该链表中倒数第k个结点.(hint: 请务必使用链表.) 输入: 输入可能包含 ...

  8. 剑指Offer:链表中倒数第k个结点【22】

    剑指Offer:链表中倒数第k个结点[22] 题目描述 输入一个链表,输出该链表中倒数第k个结点. 解题思考 我们定义两个指针L和R,R事先移动K-1个位置,然后两者同时往后移动直到遇到R的下个节点为 ...

  9. 【剑指Offer面试题】 九度OJ1517:链表中倒数第k个结点

    鲁棒性是指程序可以推断输入是否符合规范要求,并对不和要求的输入予以 合理的处理. 题目链接地址: http://ac.jobdu.com/problem.php?pid=1517 题目1517:链表中 ...

随机推荐

  1. Python自然语言处理笔记【二】文本分类之监督式分类的细节问题

    一.选择正确的特征 1.建立分类器的工作中如何选择相关特征,并且为其编码来表示这些特征是首要问题. 2.特征提取,要避免过拟合或者欠拟合 过拟合,是提供的特征太多,使得算法高度依赖训练数据的特性,而对 ...

  2. Qt::WindowFlags枚举类型解析

    在使用Qt设计的时候经常会看到QWidget控件的构造函数出现下面这样一句话: QWidget(QWidget *parent=0,Qt::WindowFlags f=0) QWidget *pare ...

  3. php 数组数字 补零

    $hour_list = range(0,24); foreach($hour_list as $key=>$val){ $hour_list[$key] = str_pad($val, 2, ...

  4. SQL小结1

    #数据表的查询框架: select [all | distinct] select_list from tb_name [where 查询条件] [group by <group_by_expr ...

  5. MySQL驱动和数据库字符集设置不搭配

    刚才控制台又报这个错,这是代表MySQL驱动和数据库字符集设置不搭配: 错误: "...Initial client character set can be forced via the ...

  6. CEF 右键添加开发者选项菜单项

    在项目开发过程中,有时候需要进行调试测试,然后我们可以在cef上下文菜单中添加自定义开发者工具菜单项,这样会比较方便,最后效果: 实现过程: 让自己的MyClientHandler来继承 CefCon ...

  7. 【做题】51Nod1766树上的最远点对——直径&线段树

    原文链接 https://www.cnblogs.com/cly-none/p/9890837.html 题意:给出一棵大小为\(n\)的树,边有边权.\(m\)次询问,每次给出两个标号区间\([a, ...

  8. freeswitch编译安装,初探, 以及联合sipgateway, webrtc server的使用场景。

    本文主要记录freeswitch学习过程. 一 安装freeswitch NOTE 以下两种安装方式,再安装的过程中遇到了不少问题,印象比较深刻的就是lua库找到不到这个问题.这个问题发生在make ...

  9. Deep Dream 模型

    本节的代码参考了TensorFlow 源码中的示例程序https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/ ...

  10. postman(四):添加变量

    在进行API测试的时候,不同接口之间有时会用到同样的参数,甚至有些值都很少会改变,比如每个请求的ip和端口. 为了提高用例的可读性以及可维护性,可以利用postman的“变量”把经常用到的“固定值”抽 ...