估计这个问题在面试中被问烂了。

思路是先找到正数的第K个结点的指针pT,然后和指向头结点的指针pN一起向后移动,直到第K个指针指向NULL,此时pN指向的结点即倒数第K个结点。

如图:

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. typedef struct Node
  5. {
  6. int data;
  7. Node* next;
  8. }Node, *List;
  9.  
  10. List createList(int num) //随机生成数字,构造链表
  11. {
  12. List aList = (List)malloc(sizeof(Node));
  13. aList->next = NULL;
  14. aList->data = ;
  15. Node* qT = aList;
  16.  
  17. for ( int i=; i< num; ++i)
  18. {
  19. Node* pTN = (Node*)malloc(sizeof(Node));
  20. pTN->data = rand()%;
  21. pTN->next = NULL;
  22. qT->next = pTN;
  23. qT = pTN;
  24. }
  25. return aList;
  26. }
  27.  
  28. void printList(List aList) //正序打印链表
  29. {
  30. if ( aList == NULL || aList->next == NULL )
  31. return;
  32.  
  33. Node* pT = aList->next;
  34. printf("element of the list:\n\t");
  35. while( pT != NULL )
  36. {
  37. printf("%d ", pT->data);
  38. pT = pT->next;
  39. }
  40.  
  41. printf("\n");
  42. }
  43.  
  44. //链表倒数第K个节点主算法
  45. Node* rfind_K_node(List aList, int K)
  46. {
  47. if ( aList == NULL || K <= )
  48. return NULL;
  49.  
  50. Node* pT = aList;
  51. Node* pN = aList;
  52. for ( int i=; i< K; ++i )
  53. {
  54. pT = pT->next;
  55. }
  56.  
  57. while ( pT != NULL )
  58. {
  59. pN = pN->next;
  60. pT = pT->next;
  61. }
  62.  
  63. return pN;
  64. }
  65.  
  66. void deleteList(List aList) //删除链表
  67. {}
  68.  
  69. int main(int argc, char const *argv[])
  70. {
  71. srand((int)time());
  72. List aList = createList();
  73. printList(aList);
  74. printf("The bottom %d Node data is %d\n", , rfind_K_node(aList, )->data);
  75. deleteList(aList);
  76.  
  77. return ;
  78. }

每天一个小算法(5)----找到链表倒数第K个结点的更多相关文章

  1. 《剑指offer》---输出链表倒数第k个结点

    本文算法使用python3实现 1 题目描述:   输入一个链表,输出该链表中倒数第k个结点.   时间限制:1s:空间限制:32768K 2 思路描述:   方法一:当链表长度为 $ n $ 时,输 ...

  2. [PHP] 数据结构-输出链表倒数第k个结点PHP实现

    输入一个链表,输出该链表中倒数第k个结点.第一个指针走(k-1)步,到达第k个节点,两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了 <?php clas ...

  3. 剑指Offer13 链表倒数第K个结点

    /************************************************************************* > File Name: 13_KthNod ...

  4. 2.2---找链表倒数第K个结点

    答案,注意,一种是递归,另一种是迭代,那么巧妙利用双指针: 迭代: public static LinkedListNode nthToLast(LinkedListNode head, int n) ...

  5. 输出单链表倒数第K个结点值

    #include<iostream>using namespace std;#include<malloc.h>#include<stdio.h>typedef i ...

  6. 算法:输入一个链表,输出该链表中倒数第k个结点。

    算法:输入一个链表,输出该链表中倒数第k个结点.<剑指offer> 思路加到注释里面了: 1:两个if判断是否返回值为空,首个为空,没有第k个值: 2:for循环找到倒数第k个值,返回为a ...

  7. 输入一个单向链表,输出该链表中倒数第K个结点

    输入一个单向链表,输出该链表中倒数第K个结点,具体实现如下: #include <iostream> using namespace std; struct LinkNode { publ ...

  8. 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点

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

  9. 【剑指offer】输入一个链表,输出该链表中倒数第k个结点。

    一.题目: 输入一个链表,输出该链表中倒数第k个结点. 二.思路: 用两个指针p1和p2,p2先跑k步,然后p1和p2同时跑,p2跑到头p1所在的位置就是倒数第k个节点.很简单吧?简单你也想不到,想到 ...

随机推荐

  1. ssh框架的搭建

    SSH 为 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架. 集成SSH框架的系统从职责上分为四层:表示层.业务逻辑层.数据持久层和域模块层,以 ...

  2. windows下,用绝对路径向html文件中插入图片

    首先注意路径中是否包含中文名比如 <img src="F:\头像\小黄人.jpg" width="500" height="200"/ ...

  3. C++_关键字

    const static extern 限制-对象隐式类型转换

  4. hdu 4639 Hehe (dp)

    一道dp题,转移方程不是自己推出来的. 题目的意思是用‘qnmlgb’替换‘hehe’,可以替换也可以不替换,问有多少种情况. 如果结尾不是‘hehe’,那么dp[i]=dp[i-1],如果是是‘he ...

  5. C++虚函数在内存中的实现

    首先来一张图,一目了然: 然后把相应的代码贴上来: class A { int a; public: virtual void f(); virtual void g(int); virtual vo ...

  6. GetMemory()函数

    NO1 void GetMemory(char *p) { p=(char *)malloc(100); } void Test() { char * str=NULL; GetMemory(str) ...

  7. 深入分析MFC文档视图结构(项目实践)

    k_eckel:http://www.mscenter.edu.cn/blog/k_eckel 文档视图结构(Document/View Architecture)是MFC的精髓,也是Observer ...

  8. poj1969---找规律

    题意:按照s型分别给数编号,给 #include <stdio.h> #include <stdlib.h> int main() { int n; while(scanf(& ...

  9. oracle初始安装大小

    oracle初始安装大小 /ruiy/ocr/DBSoftware/app/oracle/ruiy/ocr/DBSoftware/app/oraInventory/ruiy/ocr/DBData/or ...

  10. 【转】stdin, stdout, stderr 以及重定向

    详细见: http://my.oschina.net/qihh/blog/55308 stdin是标准输入文件,stdout是标准输出文件,stderr标准出错文件. 程序按如下方式使用这些文件: 标 ...