本题来自《剑指offer》 链表中倒数第k个节点

题目:

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

思路:

  倒数第k个节点,而且只能访问一遍链表,定义两个节点,两者之间相差k个距离,遍历到尾节点,则便找到了倒数k节点了。

  考虑代码的鲁棒性。代码的鲁棒是指程序能够判断输入是否合乎规范要求,并对不合理的输入给予合理的处理。

  1.如果传入的根节点是空:直接返回空

  2.传入的数据少于k个:在遍历前k个节点时候,如果发现为空,则直接返回空

  3.传入的k为小于或者等于0:直接返回空

  4.正常的数据,first和second两者相隔k,依次遍历

C++ Code:

  1. /*
  2. struct ListNode {
  3. int val;
  4. struct ListNode *next;
  5. ListNode(int x) :
  6. val(x), next(NULL) {
  7. }
  8. };*/
  9. class Solution {
  10. public:
  11. ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
  12. if (!pListHead || k<=){ //鲁棒性检测,如果头指针为空或者k小于0直接返回空
  13. return NULL;
  14. }
  15. ListNode* first = pListHead;
  16. ListNode* second = pListHead;
  17. for (int i=;i<k;i++){ //第二个节点和第一个节点相隔k个距离
  18. if (!second){
  19. return NULL;
  20. }
  21. second = second->next;
  22. }
  23. while (second){ //第一个和第二个节点依次遍历,直到尾节点为止
  24. first = first->next;
  25. second = second->next;
  26. }
  27. return first; //第一个节点便是倒数第k个节点
  28. }
  29. };

Python Code:

  1. # -*- coding:utf-8 -*-
  2. # class ListNode:
  3. # def __init__(self, x):
  4. # self.val = x
  5. # self.next = None
  6.  
  7. class Solution:
  8. def FindKthToTail(self, head, k):
  9. # write code here
  10. if not head or k <=0 : #如果head为空或者k小于0,直接返回空
  11. return None
  12. first,second = head,head
  13. for i in range(k): #第二个指针和第一个指针相差k个距离
  14. if not second : #考虑,如果个数都小于k,则直接返回空
  15. return None
  16. second = second.next
  17. while second: #两者同时遍历,直到道尾节点
  18. first = first.next
  19. second = second.next
  20. return first #第一个节点就是倒数k个节点了

总结:

  要考虑输入参数的鲁棒性,输入可能取得所有值,比如边界值,要考虑这些值的处理方法。

类似题目:

  A.求链表的中间节点:如果链表的中间节点总数为奇数,返回中间节点,如果为偶数,返回中间的其中一个。

    定义两个节点,第一个节点first一次跨一步。

    第二个节点second一次跨两步,当该节点是尾节点时候,刚好第一个节点是中间节点。

  B.判断一个链表是否形成了环形节点

    同上,定义两个指针,慢指针一次跨一步,快的指针一次跨两步,如果快的赶上了慢的,则表明是环形,如果快的指针走到了链表的末尾即为空,则表明不是环形链表。

《剑指offer》 链表中倒数第k个节点的更多相关文章

  1. 剑指offer-第三章高质量的代码(输出该链表中倒数第K个节点)

    题目:输入一个链表,输出这个链表中倒数第K个节点.(代码的鲁棒性) 思路:用两个指针p1和p2,都指向头节点,开始的时候,p2不动,p1移动k-1次,指向第k个节点.此时,如果p1->next! ...

  2. 链表中倒数第K个节点

    问题描述: 找出链表中倒数第K个节点 思路分析: 用两个指针,一前一后,保持k个距离,前面的指针移动到末尾,后面的指针就刚好直到第k个节点, 要考虑到k为0,倒数第k个节点不存在的情况. 参考代码: ...

  3. 链表中倒数第k个节点(Java)

    链表中倒数第k个节点 题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路:two-pointers思想,因为是单链表,没法得prevous点,直接遍历得到链表长度再重新遍历效率很低. 采用双指 ...

  4. 剑指offer(14)链表中倒数第K个节点

    题目描述 输入一个链表,输出该链表中倒数第k个节点. 题目分析 用两个指针来跑,两个指针中间相距k-1个节点,第一个指针先跑,跑到了第k个节点时,第二个指针则是第一个节点. 这时候两个一起跑.当第一个 ...

  5. 15:链表中倒数第K个节点

    /** * 面试题15:链表中倒数第K个节点 * 输入一个链表,输出该链表中倒数第k个结点. */ public class _15_linked_K { public static void mai ...

  6. php实现求链表中倒数第k个节点

    php实现求链表中倒数第k个节点 一.总结 $head = $head->next; //1.将$head节点next域里面的记录的那个地址值($head节点的下一个节点的地址)给$head,$ ...

  7. 【剑指offer】面试题 22. 链表中倒数第 K 个节点

    面试题 22. 链表中倒数第 K 个节点

  8. 题目15 链表中倒数第K个节点

    ///////////////////////////////////////////////////////////////////////////////////// // 5. 题目15 链表中 ...

  9. LeetCode 面试题22. 链表中倒数第k个节点

    题目链接:https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/ 输入一个链表,输出该链表中倒数第 ...

随机推荐

  1. python中的join.set ,copy以及删除注意事项:

    1 ,join  :  将对象以字符串的方式拼接成一个整体 for E :  li = ["李白", "是", "诗仙"]    s = & ...

  2. js监听浏览器返回事件

    $(function(){ pushHistory(); window.addEventListener("popstate", function(e) { window.loca ...

  3. jq的css方法

    读属性: $(selector).css(name) 设置属性: 法一: $(selector).css(name,value) 法二: $(selector).css(name,function(i ...

  4. asyncio模块中的Future和Task

      task是可以理解为单个coroutine,经过ensure_future方法处理而形成,而众多task所组成的集合经过asyncio.gather处理而形成一个future. 再不精确的粗略的说 ...

  5. vue 中通过 ajax 获取数据时,如何避免绑定的数据中出现 property of undefined 错误

    参考链接:https://segmentfault.com/q/1010000008264089?_ea=1597485

  6. ht学习流程

    http://www.hightopo.com/blog/461.html数百个 HTML5 例子学习 HT 图形组件 掌握 HT 基础: 1.先入门手册 http://www.hightopo.co ...

  7. RabbitMQ channel 参数详解

    1.Channel 1.1 channel.exchangeDeclare(): type:有direct.fanout.topic三种durable:true.false true:服务器重启会保留 ...

  8. Anaconda使用总结

    序 Python易用,但用好却不易,其中比较头疼的就是包管理和Python不同版本的问题,特别是当你使用Windows的时候.为了解决这些问题,有不少发行版的Python,比如WinPython.An ...

  9. Cascade R-CNN论文讲解(转载)

    转载链接:https://blog.csdn.net/qq_21949357/article/details/80046867 论文思想:为了解决IOU设置带来的最终的AP值,作者引入了cascade ...

  10. Python3学习笔记30-datetime模块

    datetime是Python处理日期和时间的标准库 获取当前的日期和时间 from datetime import datetime now = datetime.now() print(now) ...