C语言 单链表查找出倒数第,查找单链表倒数第k个元素

查找单链表倒数第m个结点,要求时间复杂度为O(n).(提示,使用双指针)

解题思路: 常规思路为先获取链表的长度N,然后返回N-k+1位置处的结点即可。但是中需要遍历两次链表。 我们使用另一种算法,设定两个指针p1,p2.将这两个指针都向第一个结点,让p1先走k步,然后两个指针一起向后移动,当p1到达最后一个结点时,p2指针刚好指向链表的倒数第k个结点。

关键算法:

int getK(Node *link, int k)

{

Node *p1, *p2;

int i;

if (link->next == NULL || k == 0)

return -1;

p1 = link->next;

for (i = 1; i < k; i++)

{

if (p1->next == NULL)

return -1;

p1 = p1->next;

}

p2 = link->next;

while (p1->next != NULL)

{

p1 = p1->next;

p2 = p2->next;

}

return p2->number;

}

完整程序如下:

/**************************************************************

Problem: 查找单链表倒数第N个元素,要求复杂度O(n)

User: xiaoming

Language: C

****************************************************************/

#include

#include

typedef struct node

{

int number;

struct node * next;

} Node;

int getK(Node *link, int k);

int main()

{

int n, k, i, temp;

int flag;

while (scanf("%d %d", &n, &k) != EOF && n >= 0 && n <= 1000 && k >= 0 && k <= 1000)

{

Node *link = (Node *)malloc(sizeof(Node));

link->next = NULL;

flag = 0;

Node *tail;

tail = link;

for (i = 0; i < n; i++)

{

//scanf("%d", &temp);

Node *n = (Node *)malloc(sizeof(Node));

n->next = tail->next;

tail->next = n;

tail = tail->next;

n->number = i + 1;

}

int numberK = getK(link, k);

numberK == -1 ? printf("NULL\n") : printf("%d\n", numberK);

}

return 0;

}

int getK(Node *link, int k)

{

Node *p1, *p2;

int i;

if (link->next == NULL || k == 0)

return -1;

p1 = link->next;

for (i = 1; i < k; i++)

{

if (p1->next == NULL)

return -1;

p1 = p1->next;

}

p2 = link->next;

while (p1->next != NULL)

{

p1 = p1->next;

p2 = p2->next;

}

return p2->number;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这样才是代码管理和 Commit 的正确姿势 | 研发效能提升36计

简介&#xff1a;效能提升从小习惯开始&#xff0c;这样才是代码管理和 Commit 的正确姿势&#xff01; 专栏策划&#xff5c;雅纯 志愿编辑&#xff5c;张晟 软件交付是以代码为中心的交付过程&#xff0c;其中代码的作用有几点&#xff1a;第一&#xff0c;最终的制品要交付…

vSphere+、vSAN+来了!VMware 混合云聚焦:原生、快速迁移、混合负载

编辑 | 宋慧 出品 | CSDN云计算 vSphere、vSAN&#xff0c;从云计算兴起&#xff0c;就是 VMware 在虚拟化、分布式存储里大名鼎鼎的核心技术产品。不过随着云的发展到云原生、以及国内混合云快速发展的今天&#xff0c;虚拟化的领导者 VMware 有哪些最新的方案&#xff0c;值…

技术解读:实时数仓Hologres如何支持超大规模部署与运维

简介&#xff1a;在本次评测中&#xff0c;Hologres是目前通过中国信通院大数据产品分布式分析型数据库大规模性能评测的规模最大的MPP数据仓库产品。通过该评测&#xff0c;证明了阿里云实时数仓Hologres能够作为数据仓库和大数据平台的基础设施&#xff0c;可以满足用户建设大…

c语言怎么写贪吃蛇,刚学C语言,想写一个贪吃蛇的代码

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#include#include#includetypedef struct snake{int a;int b;struct snake *u;struct snake *n;}snake,*snake1;typedef struct food{int a;int b;}food;void main(){char c,c0 d;int i,j,k,n1,t,at;snake p,q;snake *dd,…

阿里推出新品牌“瓴羊”,致力成为“数字化领头羊”

伴随我国数字化转型步入“深水区”&#xff0c; 数字化技术让企业服务更加智能与规范&#xff0c;但在企业探索和实践数字化的过程中&#xff0c;不少企业由于数字化基础薄弱&#xff0c;遇到内部数据分散、不会用或用不好数据等难题。如何更好地帮助企业用数字化的方式来提升业…

成功通航:用宜搭提升数字化管理效能,确保每次飞行任务安全执行

简介&#xff1a;宜搭帮助山西成功通航节省了100万左右的成本&#xff0c;同时使管理运营效率提升了76%。 山西成功通用航空股份有限公司 50-100人 / 航空运输 / 山西-长治 / 成功通航综合管理平台 “通用航空迎来发展机遇&#xff0c;随着通航行业‘放管服’政策的不断推进…

香农编码二叉树c语言,shannon码的编码实验总结.docx

shannon码的编码实验总结本科生实验报告  实验课程信息理论与编码  学院名称信息科学与技术学院  专业名称  学生姓名  学生学号  指导教师  实验地点  实验成绩  二〇一六年九月----二〇一六年十一月  填写说明  1、适用于本科生所有的实验报告&#xf…

用键盘输入一条命令

作者 | 闪客来源 | 低并发编程新建一个非常简单的 info.txt 文件。name:flash age:28 language:java在命令行输入一条十分简单的命令。[rootlinux0.11] cat info.txt | wc -l 3这条命令的意思是读取刚刚的 info.txt 文件&#xff0c;输出它的行数。我们先从最初始的状态开始说起…

Redis 7.0 Multi Part AOF的设计和实现

简介&#xff1a;本文将详解Redis中现有AOF机制的一些不足以及Redis 7.0中引入的Multi Part AOF的设计和实现细节。 Redis 作为一种非常流行的内存数据库&#xff0c;通过将数据保存在内存中&#xff0c;Redis 得以拥有极高的读写性能。但是一旦进程退出&#xff0c;Redis 的数…

电大1253c语言程序设计考试题,电大1253《C语言程序设计》开放大学期末考试试题2020年1月(含答案)...

《电大1253《C语言程序设计》开放大学期末考试试题2020年1月(含答案)》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《电大1253《C语言程序设计》开放大学期末考试试题2020年1月(含答案)(6页珍藏版)》请在人人文库网上搜索。1、试卷代号&#xff1a;1253座位号口口 国…

面向B端算法实时业务支撑的工程实践

简介&#xff1a;在营销场景下&#xff0c;算法同学会对广告主提供个性化的营销工具&#xff0c;帮助广告主更好的精细化营销&#xff0c;在可控成本内实现更好的ROI提升。我们在这一段时间支持了多个实时业务场景&#xff0c;比如出价策略的实时化预估、关键词批量服务同步、实…

中间表是如何被消灭的?

作者 | 不吃西红柿来源 | CSDN博客中间表的产生中间表是数据库中专门存放中间计算结果的数据表&#xff0c;往往是为了前端查询统计更快或更方便而在数据库中建立的汇总表&#xff0c;由于是由原始数据加工而成的中间结果&#xff0c;因此被称为中间表。在某些大型机构中&#…

自定义控件android.r,Android控件架构与自定义控件

前言最近在开发的路上越走越远了&#xff0c;每天在看各位大神公众号更新内容是自定义View的时候&#xff0c;一些小的内容有点模具&#xff0c;决定回过头来温习一下过往的内容。此篇也是根据android群英传来总结的一篇文章。1 Android控件架构Android的每个控件都是占一块矩形…

基于 PTS 压测轻松玩转问题诊断

简介&#xff1a;性能测试 PTS&#xff08;Performance Testing Service&#xff09;是具备强大的分布式压测能力的 SaaS 压测平台&#xff0c;可模拟海量用户的真实业务场景&#xff0c;全方位验证业务站点的性能、容量和稳定性。 作者&#xff1a;智云 为什么要做压测的问题…

阿里云开源业内首个应用多活项目 AppActive,与社区共建云原生容灾标准

简介&#xff1a;继高可用架构团队的 Sentinel、Chaosblade 开源后&#xff0c;第三个重磅高可用产品&#xff1a;应用多活 AppActive 正式开源&#xff0c;形成高可用的三架马车&#xff0c;帮助企业构建稳定可靠的企业级生产系统&#xff0c;提高企业面对容灾、容错、容量等问…

android xml左边,Android XML – 如何将项目对齐到最左侧,中间和最右侧

您需要使用weight属性.可以把它想象成让android知道它应该给每个项目的宽度百分比.你需要为所有3个项目设置宽度为0dip并添加权重属性android:layout_width"wrap_content"android:layout_height"wrap_content"android:text"Cancel"android:layou…

清晰还原31年前现场,火山引擎超清修复Beyond经典演唱会

7月3日晚&#xff0c;抖音携手环球音乐旗下厂牌宝丽金&#xff0c;直播经过火山引擎超清修复的Beyond Live1991生命接触演唱会及纪念音乐会精选内容&#xff0c;吸引了超1.4亿人次观看。 Beyond是一支成立于1983年的摇滚乐队&#xff0c;随着粤语音乐的兴起&#xff0c;Beyond…

如何定位并修复 HttpCore5 中的 HTTP2 流量控制问题

简介&#xff1a;开篇吹一波阿里云性能测试服务 PTS&#xff0c;PTS 在 2021 年 5 月份已经上线了对 HTTP2 协议的支持&#xff08;底层依赖 httpclient5&#xff09;&#xff0c;在压测时会通过与服务端协商的结果来决定使用 HTTP1.1 或者 HTTP2 协议。 作者&#xff1a;风起…

全链路灰度之 RocketMQ 灰度

简介&#xff1a;本文将以上次介绍过的《如何用 20 分钟就能获得同款企业级全链路灰度能力&#xff1f;》中的场景为基础&#xff0c;来进一步介绍消息场景的全链路灰度。 作者&#xff1a;亦盏 之前的系列文章中&#xff0c;我们已经通过全链路金丝雀发布这个功能来介绍了 M…

普洛斯数据中心发布DC Brain系统,科技赋能智慧化运营管理

7月5日&#xff0c;普洛斯数据中心发布了DC Brain智慧化运营管理系统。该系统由普洛斯历时两年自主研发&#xff0c;契合现代化数据中心平台的发展趋势。目前已应用于普洛斯旗下数据中心&#xff0c;并有对外输出的成功案例&#xff0c;面向行业&#xff0c;赋能中小规模运营商…