今天和大家分享一道2009年代码为408的一道真题:
已知一个带有表头的单链表,结点结构为data-link,假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。若查找成功,算法输出该结点的data域的值,并返回1,否则,只返回0.。
评分标准:如果能一次遍历找出k,得满分15,超过一次遍历最高得10分
下面我们直接来看代码:

struct LinkNode{int data;LinkNode *link;
} *LinkList;
int Search_k(LinkList list,int k){//查找链表list倒数第k个结点,并输出该结点data域的值LinkList p=list->link;//指针p,q指向链表的第一个结点 LinkList q=list->link;int count=0;//计数器初始化为0 while(p!=NULL){//指针p依次遍历链表直至最后一个结点 if(count<k)count++;elseq=q->link;p=p->link;} //while/*上面这几行是这个算法的核心思想,我来解释一下首先算法开始运行时,p在动,而q不动直到p向右移动了k次,此时k和count相等,这时候p和q一起向右移动如果k小于链表的长度,则返回q指针指向的数据域 */if(count<k)//若k值大于链表的长度,则找不到该结点,返回0 return 0;else{cout<<q->data<<endl;//找到该结点则返回该结点的数据域 return 1;}
}

这道题用两个变量就解决了这个难题,可见同步的思想处处可见。我记得以前有一家公司出过一道面试题,看起来很简单,却难走了很多人,这道面试题主要说的是交换两个变量的值,但是前提是不能引入第三个变量,我们来看下具体的代码:

void swap(int &a,int &b){a=a+b;b=a-b;a=a-b;
}

今天写了挺久的,休息会儿

已知一个带有表头的单链表,结点结构为data-link,假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。相关推荐

  1. (关于单链表的真题)已知一个带有表头结点的单链表...请设计一个尽可能高效的算法,查找链表中倒数第k个位置的结点。

    真题描述 已知一个带有表头结点的单链表,结点结构为 data next 假设该链表只给出了头指针head.在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点. 若查找成 ...

  2. 已知一个带有表头结点的单链表,结点结构为 data link 假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的 算法,查找链表中倒数第k个位置

    分析: 这是一个单链表算法题,题中说要在不改变链表本身的前提下,设计一个尽可能高效的算法,说明时间复杂度.空间复杂度都要尽可能地高效,常数也要尽可能小. 思路: 设置两个指针p和q,指p针在指针q后k ...

  3. 给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。

    笔者初涉<算法设计与分析>这门专业课,在做一些算法设计题的过程中遇到一些小感悟,特此记录和大家分享. 下面直接给出算法题目: 给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高 ...

  4. 请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素

    给定一个单向链表(长度未知),请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素. 实现这个算法,并为可能出现的特例情况安排好处理措施. 倒数第m个元素"是这样规定的:当m= ...

  5. 【408计算机考研】|【2018统考真题-41】| 给定一个含 n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数

    目录 一.题目 二.解答 三.测试数据 一.题目   给定一个含 n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算 法,找出数组中未出现的最小正整数.例如,数组{-5, 3, 2, 3}中未 ...

  6. 设计一算法查找链表的中间结点。要求该算法的时间复杂度为O(n),空间复杂度为O(1)

    设计一算法查找链表的中间结点.要求该算法的时间复杂度为O(n),空间复杂度为O(1) #include <stdio.h> #include <stdlib.h> typede ...

  7. 【C++】公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?请设计一个“高效”的算法求解。

    题目分析 公元前五世纪,我国古代数学家张丘建在<算经>一书中提出了"百鸡问题":鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一.百钱买百鸡,问鸡翁.鸡母.鸡雏各几何?请设计一 ...

  8. 数据结构——已知数组A[1…n] 的元素类型为整型int,设计一个时间和空间上尽可能高效的算法,将其调整为左右两部分,左边所有元素为奇数,右边所有元素为偶数,不要求对这些元素排序。

    题目:已知数组A[1-n] 的元素类型为整型int,设计一个时间和空间上尽可能高效的算法,将其调整为左右两部分,左边所有元素为奇数,右边所有元素为偶数,不要求对这些元素排序. 代码展示: #inclu ...

  9. c语言中定义密码为英文字母,请设计 一个密码生成器,要求随机生成4组10位密码(C语言)...

    请设计 一个密码生成器,要求随机生成4组10位密码(密码只能由字母和数字组成),每一组必须包含至少一个大写字母,每组密码不能相同,输出生成的密码. #include #include #include ...

最新文章

  1. 微信小程序加密解密 C# 以及 填充无效,无法被移除错误的解决方案 Padding is invalid and cannot be removed
  2. mysql workbench ssh_通过MySQL Workbench进行SSH隧道
  3. 【USACO】电子游戏 有条件的背包
  4. python 修改json文件的value值,利用python修改json文件的val
  5. 联想m7400pro更换墨粉盒怎么清零_佳能打印机怎么换墨水 佳能打印机换墨水注意事项【详解】...
  6. bundle中vim相关快捷键的使用
  7. css随记01编辑技巧,背景与边框
  8. 2018我们要赢 (5 分)
  9. c# socket接收字符串_php 的 socket简单原理及实现
  10. mql 查询多结果_MQL入门到精通EA教程第六课MQL语言基础(五)
  11. springboot session超时设置_Spring Boot+Spring Security:获取用户信息和session并发控制...
  12. win10安装 Ruby on Rails 问题记录
  13. QT如何给exe添加图标
  14. 分布式-分布式常见问题和解决方案
  15. Windows Phone 8107更新方法
  16. MBR和GUID区别
  17. ios沙箱模式开启_iOS沙盒(sandBox)机制总结
  18. APM 飞控文档翻译2
  19. 贝塞尔曲线 三维 拼接 matlab,贝塞尔曲线公式
  20. Java 实现ES批量索引

热门文章

  1. 基本数据类型与包装类类型转换
  2. CentOS 常用操作
  3. 揭开 Raft 的神秘面纱,和ApacheRatis 了解Raft 组件的使用
  4. java mediatype属性_基于ServletRequest实现请求获取内容类型的媒体类型MediaType、字符集Charset的工具类ContentTypeUtil...
  5. 中国护照上两行88个字符的含义
  6. 西雅图生物科技公司裁员12%!
  7. “李四呢”这个名字挺独特的
  8. OAuth2 -GitHub授权登录超详细教程
  9. matlab三维图形显示与控制
  10. jq兄弟选择器及节点