单链表输出倒数第k个元素
这个算法已经有不少人写过了,但是为了考研后期复习还是在此记录一下自己的心得。
方法有如下几种:
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个元素相关推荐
- 删除带头结点单链表中倒数第k个结点
[问题描述] 设有头结点单链表,删除单链表中倒数第k个结点. [输入形式] 第一行重复输入整数建立带头结点的单链表,输入字符结束. 第二行输入一个整数k,表示删除倒数第k个结点. [输出形式] 输出删 ...
- 如何找出单链表中倒数第K个元素
第一种方法 为了找出单链表的倒数第K个元素,需要知道这个单链表的长度是多少,就是需要遍历一遍这个单链表,长度为n,倒数第k个,就是单链表的第(n-k)个元素 public Node findLastK ...
- python 链表倒数第k个节点_链表-删除单链表中倒数第k个节点
题目 实现一个函数,一个可以删除单链表中倒数第k个节点 难度 简单 分析 本题比较简单,实现方法多种多样,这里提供一种方法 首先明确一点,在单链表中删除倒数第k个节点,需要找到他的前一个节点,让前一个 ...
- 单链表中倒数第K个结点
单链表中倒数第K个结点 链表结点定义如下: typedef int ElemType;typedef struct Node {ElemType data; struct Node *next; }H ...
- 【小f的刷题笔记】(JS)链表 - 单链表的倒数第 k 个节点 LeetCode19 单链表的中点 LeetCode876
[链表] 一.单链表的倒数第 k 个节点: ✔ 要求:只遍历一遍,链表有多长未知 LeetCode19 链接: 19.删除链表的倒数第N个结点 题目: 思路: 因为没有给头结点,我们就先定义一个哑结点 ...
- Java数据结构与算法———(10)单链表应用实例,找到单链表中倒数第K个节点
找到单链表中的倒数第K个节点,并打印输出节点.两段代码,思路都是相似的. 一.代码1 public class SingleLinkedListDemo {public static void mai ...
- c语言单链表删除倒数第k个数,在单链表中删除倒数第k个节点
实现方式很多,在这里只说两种实现方式.看不懂时候,大家可以画画图,对理解为什么很有帮助. 第一种方式: 1.首先判断K值和链表是否为空,如果k<=0,或链表为空,直接返回head: 2.满足上面 ...
- 查找单链表的倒数第k个节点,要求只能遍历一次链表(C语言)
PSListNode FindLastKNode(PSListNode pHead, int K) {if ((NULL == pHead) || (K <= 0)){return NULL;} ...
- 如何快速查看单链表倒数第K个元素
大致思路:只需要一次遍历即可查找到倒数第k个元素.由于单链表只能从头到尾依次访问链表的各个节点,因此,如果要找到链表的倒数第k个元素的话,也只能从头到尾进行遍历查找,在查找过程中,设置两个指针,让其中 ...
最新文章
- linux c access 函数 文件 目录 路径 是否存在
- 数据库中关于convert的参数学习(转化函数用法)
- 数据仓库—stg层_数据仓库之Hive快速入门 - 离线实时数仓架构
- 如何运行一个Java文件?
- boost::remove_edge_if用法的测试程序
- 使用java获取本机mac
- ​【v2.x OGE-example 第二节】 实体参数
- jquery如何获取checkbox的值
- python输入输出代码_python基本输入输出代码示例
- ResNet在分别在Keras和tensorflow框架下的应用案例
- 【精】C语言之变量存储类型
- Nexpose漏扫使用步骤
- param.requires_grad = False
- 搞定Prometheus普罗米修斯监控系统
- 电脑连接了HDMI线,电脑没有声音了,原因和解决办法
- 2022年王道数据结构考研复习指导习题代码(排序)
- 自动收取蚂蚁森林能量雨
- 将Clound compare以及一些mathLab 等源码,集成到我们vs上来并编译
- Android Studio 模拟器重启(解决模拟器卡死问题)
- 最适合跑步用的耳机有哪些、精选五款最优秀的跑步耳机推荐
热门文章
- WebRTC M96 Release Notes(SDP废除Plan B,支持Opus Red冗余编码)
- STM32CubeMX安装及使用教程(二)
- Android中的按摩棒
- 新网银行java面试题_新网银行面试
- 64位Ubuntu系统兼容32位程序
- EasyConnect服务器启动失败,建议关闭浏览器后重新登录
- ubuntu oracle 12c,在Ubuntu上怎么装oracle12c
- java+selenium+chromedriver 整页截屏
- 字符编码之Ascll编码,ANSI编码,Unicode编码,UTF-8编码 ,BOM
- 1994年图灵奖--爱德华·费根鲍姆和劳伊·雷迪简介