这个算法已经有不少人写过了,但是为了考研后期复习还是在此记录一下自己的心得。

方法有如下几种:
1、 遍历单链表两次,第一次获取链表总长度,第二次寻找倒数第K个元素就很简单了。但是该方法需要遍历两次链表。
2、 遍历单链表并记录长度,将每个元素存入顺序表中,然后通过下标获取倒数第k个元素。该方法只需遍历一次链表,但是需要额外的存储空间。
3、 既然是倒数第k个元素,那么只要从后往前数k个不就行了。但是又是单链表,获取不到前驱节点。不过,并不需要获取每一个元素的前驱节点,只需要定义两个指针,一个指向最后一个元素,另一个在它前面K个位置即可。而如何实现呢?

一开始,两个指针都指向第一个元素,但是如果它们之间的距离小于K,那么只移动第一个指针。而当他们之间的距离等于K后,两个指针一起后移,这样在第一个指针指向链表最后一个元素的时候,第二个指针就指向的是倒数第K个元素。
只需要一次遍历,不需要额外空间。

代码:

typedef int ElemType;
typedef struct LNode
{ElemType data;struct LNode* next;
}LNode,*LinkList;int Search_k(LinkList list, int k)
{LNode *p = list->next,*q=list->next;  //p和q一开始都指向第一个节点int count =0;  //用于记录p和q之间的距离while(p!=NULL){if(count<k) k++;else q=q->next;p=p->next;}if(count < k)return 0;  //数组长度<kprint(q->data);  //输出q的值return 1;
}

欢迎大家加入QQ群一起交流讨论,「吟游」程序人生——YinyouPoet

单链表输出倒数第k个元素相关推荐

  1. 删除带头结点单链表中倒数第k个结点

    [问题描述] 设有头结点单链表,删除单链表中倒数第k个结点. [输入形式] 第一行重复输入整数建立带头结点的单链表,输入字符结束. 第二行输入一个整数k,表示删除倒数第k个结点. [输出形式] 输出删 ...

  2. 如何找出单链表中倒数第K个元素

    第一种方法 为了找出单链表的倒数第K个元素,需要知道这个单链表的长度是多少,就是需要遍历一遍这个单链表,长度为n,倒数第k个,就是单链表的第(n-k)个元素 public Node findLastK ...

  3. python 链表倒数第k个节点_链表-删除单链表中倒数第k个节点

    题目 实现一个函数,一个可以删除单链表中倒数第k个节点 难度 简单 分析 本题比较简单,实现方法多种多样,这里提供一种方法 首先明确一点,在单链表中删除倒数第k个节点,需要找到他的前一个节点,让前一个 ...

  4. 单链表中倒数第K个结点

    单链表中倒数第K个结点 链表结点定义如下: typedef int ElemType;typedef struct Node {ElemType data; struct Node *next; }H ...

  5. 【小f的刷题笔记】(JS)链表 - 单链表的倒数第 k 个节点 LeetCode19 单链表的中点 LeetCode876

    [链表] 一.单链表的倒数第 k 个节点: ✔ 要求:只遍历一遍,链表有多长未知 LeetCode19 链接: 19.删除链表的倒数第N个结点 题目: 思路: 因为没有给头结点,我们就先定义一个哑结点 ...

  6. Java数据结构与算法———(10)单链表应用实例,找到单链表中倒数第K个节点

    找到单链表中的倒数第K个节点,并打印输出节点.两段代码,思路都是相似的. 一.代码1 public class SingleLinkedListDemo {public static void mai ...

  7. c语言单链表删除倒数第k个数,在单链表中删除倒数第k个节点

    实现方式很多,在这里只说两种实现方式.看不懂时候,大家可以画画图,对理解为什么很有帮助. 第一种方式: 1.首先判断K值和链表是否为空,如果k<=0,或链表为空,直接返回head: 2.满足上面 ...

  8. 查找单链表的倒数第k个节点,要求只能遍历一次链表(C语言)

    PSListNode FindLastKNode(PSListNode pHead, int K) {if ((NULL == pHead) || (K <= 0)){return NULL;} ...

  9. 如何快速查看单链表倒数第K个元素

    大致思路:只需要一次遍历即可查找到倒数第k个元素.由于单链表只能从头到尾依次访问链表的各个节点,因此,如果要找到链表的倒数第k个元素的话,也只能从头到尾进行遍历查找,在查找过程中,设置两个指针,让其中 ...

最新文章

  1. linux c access 函数 文件 目录 路径 是否存在
  2. 数据库中关于convert的参数学习(转化函数用法)
  3. 数据仓库—stg层_数据仓库之Hive快速入门 - 离线实时数仓架构
  4. 如何运行一个Java文件?
  5. boost::remove_edge_if用法的测试程序
  6. 使用java获取本机mac
  7. ​【v2.x OGE-example 第二节】 实体参数
  8. jquery如何获取checkbox的值
  9. python输入输出代码_python基本输入输出代码示例
  10. ResNet在分别在Keras和tensorflow框架下的应用案例
  11. 【精】C语言之变量存储类型
  12. Nexpose漏扫使用步骤
  13. param.requires_grad = False
  14. 搞定Prometheus普罗米修斯监控系统
  15. 电脑连接了HDMI线,电脑没有声音了,原因和解决办法
  16. 2022年王道数据结构考研复习指导习题代码(排序)
  17. 自动收取蚂蚁森林能量雨
  18. 将Clound compare以及一些mathLab 等源码,集成到我们vs上来并编译
  19. Android Studio 模拟器重启(解决模拟器卡死问题)
  20. 最适合跑步用的耳机有哪些、精选五款最优秀的跑步耳机推荐

热门文章

  1. WebRTC M96 Release Notes(SDP废除Plan B,支持Opus Red冗余编码)
  2. STM32CubeMX安装及使用教程(二)
  3. Android中的按摩棒
  4. 新网银行java面试题_新网银行面试
  5. 64位Ubuntu系统兼容32位程序
  6. EasyConnect服务器启动失败,建议关闭浏览器后重新登录
  7. ubuntu oracle 12c,在Ubuntu上怎么装oracle12c
  8. java+selenium+chromedriver 整页截屏
  9. 字符编码之Ascll编码,ANSI编码,Unicode编码,UTF-8编码 ,BOM
  10. 1994年图灵奖--爱德华·费根鲍姆和劳伊·雷迪简介