题目:输入一个单向链表(只有指向下一个结点指针),输出链表中的倒数第k个结点。

分析:

1. 一个单向链表只有指向下一个结点的指针,所以我们无法得到前面一个结点的指针,所以不能通过最朴素的枚举法来求出。

2. 现在要求出倒数第k个结点。现在用一个指针枚举是无法求出,但是我们可以使用两个指针法(非常重要)。

初始化设置两个指针p1和p2,p1和p2都指向链表的头结点。我们可以先让指针p1指针先走到第k个结点,下一步开始两个指针p1和p2一起走,当p1指向链表最后一个结点的时候p2指向即为倒数第k个结点。

为什么呢这个方法是正确的?

当p1指向第k个结点的时候,p2和p1相差k个结点,所以当p1指向尾结点的时候,p2指向的即为倒数第k个结点。

代码:

[cpp] view plaincopy
  1. //链表结点
  2. struct ListNode{
  3. int value;
  4. ListNode *nextNode;
  5. };
  6. //求倒数第k个结点
  7. ListNode* GetKthFromTail(ListNode *headNode, int k){
  8. //数据不合法
  9. if((headNode == NULL) || (k <= 0)){
  10. return NULL;
  11. }
  12. ListNode *p1 = headNode;
  13. ListNode *p2 = headNode;
  14. int count = 1;
  15. //让p1先走到第k个结点
  16. while((count < k) && (p1 != NULL)){
  17. p1 = p1->nextNode;
  18. ++count;
  19. }
  20. //判断数据合法性
  21. if(p1 == NULL){
  22. return NULL;
  23. }
  24. //两个指针一起走,当p1指向尾结点是p2指向即为倒数第k个结点
  25. while(((p1->nextNode) != NULL)){
  26. p1 = p1->nextNode;
  27. p2 = p2->nextNode;
  28. }
  29. return p2;
  30. }

求链表倒数第k个结点相关推荐

  1. 面试题整理 2:求链表倒数第 k 个结点

     题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表的尾指针. 链表结点定义如下: struct ListNode { int m_nKey; ListNode ...

  2. php输出0到5之间到数,php如何实现输出链表倒数第k个结点(代码实例)

    本篇文章给大家带来的内容是关于php如何实现输出链表倒数第k个结点(代码实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 输入一个链表,输出该链表中倒数第k个结点.第一个指针走( ...

  3. 【练习】c++删除链表倒数第K个结点和 插入排序算法将单链表递增排序

    删除单链表倒数第K个结点 运行结果: 代码: struct node {int data;node* next;}; //删除链表的倒数第k个结点 bool delet(node*& L, i ...

  4. 【融博笔试题】查找单链表倒数第k个结点的值

    继华赛之后,又一次倒在面试门前.基础不扎实就是不行啊! 下来做完这道题,顺便复习单链表.代码如下: //------------------------------------------------ ...

  5. 链表题目--2 求链表的中间结点 和 求链表中倒数第k个结点

    求链表的中间结点 思路 一个走两步,一个走一步.一个走到尾,另外一个就走到了中间 /*** Definition for singly-linked list.* struct ListNode {* ...

  6. c语言求单链表倒数第k个节点,链表中倒数第k个结点

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 解析 设置两个指针,一个遍历链表到第k-1个结点,第二个再开始遍历,直到遍历到链表的最后一个结点,那么第二个指针指向的,就是倒数第k个结点. Ja ...

  7. 【剑指offer-Java版】15链表中倒数第K个结点

    链表中倒数第K个结点:快慢指针解决 需要注意的地方是 1) 可能会存在输入的链表大小小于k 2) 输入的k可能小于等于0 - 所以必须限定k大于0 public class _Q15 {public ...

  8. 剑指Offer #14 链表中倒数第k个结点(快慢指针) | 图文详解

    题目来源:牛客网-剑指Offer专题 题目地址:链表中倒数第k个结点 题目描述 输入一个链表,输出该链表中倒数第k个结点. 节点结构如下: public class ListNode {int val ...

  9. [剑指offer]面试题15:链表中倒数第k个结点

    面试题15:链表中倒数第k个结点 题目:输入一个链表,输出该链表中倒数第 k 个结点.为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6个结点,从头结点开始 ...

最新文章

  1. JVM启动流程和内存结构
  2. 常见RAID的各级别的特性简介(RAID0、1、5、6、10)
  3. IOS控件的应用UIPageController与UIScrollView
  4. matlab global(全局变量)
  5. 掌握 Ajax,第 1 部分: Ajax 入门简介
  6. 2015年C语言组混搭 C/C++
  7. ServerVariables 变量
  8. WAP技术入门(下)(转)
  9. 【离散数学】集合论 第三章 集合与关系(2) 集合的基本运算
  10. 【算法】泽勒的一致性
  11. 关于汉字的部件部首和独体字
  12. win10很多软件显示模糊_win10自带对录屏软件一直显示目前无法录制,后台录制出现问题怎么办?...
  13. 《人类简史》--摘录
  14. 安装常见的错误及解决方法(记录)
  15. python与其他的数据分析有什么区别_学好python和数据分析有什么关系?
  16. 稀疏矩阵的存储方法(DOK、LIL、COO、CSR, CRS)
  17. Bitmap的图片压缩汇总
  18. 本周总结 前端第二次作业 模仿制作百度界面
  19. sfm眼睛带viewtarget制作
  20. 笔记本双网卡实现同时访问内外网

热门文章

  1. 【设计模式】备忘录模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
  2. 【错误记录】Android Studio 编译报错 ( AppCompat does not support the current theme features )
  3. 【数据挖掘】关联规则挖掘 Apriori 算法 ( 关联规则性质 | 非频繁项集超集性质 | 频繁项集子集性质 | 项集与超集支持度性质 )
  4. SSH port forwarding: bind: Cannot assign requested address
  5. BZOJ2437 [Noi2011]兔兔与蛋蛋 【博弈论 + 二分图匹配】
  6. Java基础23-集合类2(Set接口,Iterator迭代器)
  7. Binary Tree Postorder Traversal
  8. 经典算法题每日演练——第十九题 双端队列
  9. Oracle10g 64位 在Windows 2008 Server R2 中的安装 解决方案
  10. malloc/new函数及malloc()的一种简单原理性实现