`
bencode
  • 浏览: 109201 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

两道笔试题

    博客分类:
  • C++
阅读更多
昨天一朋友找工作, 碰到两道算法笔试题, 都是当于链表操作的.

原题具体的还原不过来了, 不过大致是:

1. 有一单链表, 找出最后第m个节点.

 昨天看到问题时,想到了小学应用题:

汽车过山洞, 假如这个汽车开着开着, 等到车头刚要出山洞, 车尾离山洞出口也有一段距离嘛...

这样, 这个题方法出来了

cpp 代码
 
  1. Node* FindLastNode(Node* root, int m) {  
  2.     Node* head = root;  
  3.     Node* tail = root;  
  4.   
  5.     // 开始时,大概是这样  
  6.     //           |---------------------|  这个是山洞  
  7.     //           >>               这个是车车? 哦, 是小蛇, 身体盘在一起...  
  8.       
  9.     // 然后往前爬  
  10.     for (int i = 0; i < m; ++i) {  
  11.         head = head->next;  
  12.     }  
  13.   
  14.     // 此时  
  15.     //           |---------------------|  这个是山洞  
  16.     //           >-------->  
  17.   
  18.     // 一起前进吧  
  19.     while (head->next) {  
  20.         head = head->next;  
  21.         tail = tail->next;  
  22.     }  
  23.   
  24.     // 此时  
  25.     //           |---------------------|  这个是山洞  
  26.     //                        >-------->  
  27.   
  28.     return tail;  
  29. }  

当然,特殊情况要考虑, 不过那....


2.  有一单链表, 判断是否存在环

 
有环? 走着走着, 却突然发现, 怎么也走不完, 可是这要走到什么时候? 此法不通

可是怎么也想不出好办法. 只有一个笨方法:

看看现在走的路, 是不是已走过...

cpp 代码
 
  1. bool HasCircle(Node* root) {  
  2.     Node* cur = root;  
  3.     while (cur->next) { // 1 号走到一个站, 等  
  4.         // 派出2号,开始走, 看是否更快地和1号相遇  
  5.         for (Node* other = root; other->next != cur; other = other->next) {  
  6.             if (cur->next == other) {     
  7.                 return true;    // 2号提前赶到, 1 号走冤枉路了  
  8.             }  
  9.         }  
  10.         cur = cur->next;      
  11.     }  
  12.     return false;  
  13. }  


对于2, 不知道有没有更好的办法?
分享到:
评论
3 楼 jjcang 2007-08-17  
第2题应该把走过的node记录下来,查找快点。
bool hasCycle(node* p){
set<node*> passed;

while( p->next){
p= p->next;
if( passed.find(p) != passed.end()) return true;
passed.insert(p);
}
return false;

特殊情况没有考虑。
2 楼 bcccs 2007-08-15  
第2题,在单链表的情况下应该是只有这个方法了吧。时间复杂度也不高,
1 楼 抛出异常的爱 2007-08-15  
one = root
two = root 
two.next; (刚刚忘记先走出去一步了)
    while (one.next) {// 1号,走一站
        two.next; // 2号,走1站,(比one快一步)
         if(two==one) return true;// 看是否与1号相遇 
        two.next;//2号,再走一站,(比one快二步)
          if(tw0==one)return true;
   
     }  
return false;

上学时一个例题???大约是这么写的,几乎没写过C

相关推荐

    百度2010运维web开发两道笔试题.

    标题中的“百度2010运维web开发两道笔试题”指的是百度公司在2010年针对运维Web开发岗位设计的笔试题目。这样的题目通常旨在评估应聘者的逻辑推理能力和编程能力,是技术面试的重要组成部分。 第一道题是一道逻辑...

    计算机后端-Java-Java核心基础-第15章 面向对象07 20. 接口课后两道笔试题.avi

    计算机后端-Java-Java核心基础-第15章 面向对象07 20. 接口课后两道笔试题.avi

    华信笔试题笔试题笔试题

    大连华信去年的笔试题,可以给各位即将工作的同学一些参考

    阿里巴巴校招软件笔试题经典(含答案).doc

    阿里巴巴的校招软件笔试题涵盖了数据结构、...以上就是两道笔试题涉及的主要知识点,以及针对搜索系统测试的一般方法。在实际的面试和笔试中,这些问题不仅测试编程基础,还考察了应聘者对实际问题的分析和解决能力。

    高通笔试题--嵌入式C开发人员的最好的0x10道笔试题详细解析.docx

    "高通笔试题--嵌入式C开发人员的最好的0x10道笔试题详细解析" 本节知识点详细解析高通笔试题中的10道笔试题,涵盖嵌入式C开发人员所需的各种知识点,包括volatile关键字、类型转换、递归调用、指针、多维数组、逗号...

    129道经典.NET笔试题

    129道经典.NET笔试题,中小型企业常考.NET笔试题,欢迎广大朋友下载学习,是非常基础的一些知识常考点,希望大家可以把它们背的滚瓜烂熟,因为走到哪儿找工作,先做的都是一套笔试题,而这些笔试题基本都是来自这儿!

    常见linux笔试题-100道选择题-(答案见最后).doc

    Linux 操作系统常见笔试题知识点总结 本文总结了 Linux 操作系统常见的笔试题,涵盖了 Linux 基础知识、文件系统管理、用户管理、权限管理、进程管理、系统安全等方面的知识点。 Linux 基础知识 1. cron 是一个...

    100道程序员笔试题

    这份"100道程序员笔试题"集合涵盖了多种编程语言、数据结构、算法、操作系统、网络、数据库等多个领域的核心知识点,是提升技术能力的好资料。下面我们将详细探讨这些题目所涉及的关键知识。 1. **编程语言基础**:...

    网络工程师招聘基础笔试题

    网络工程招聘笔试题;题目是基础级别,但容易做错;参加笔试之前可以下载来看看;有几道题目答案错误,已在一篇博客中重新写出;

    C++笔试题(选择+填空+简答+编程 含答案)

    C++笔试题笔记 本资源摘要信息将详细解释C++笔试题中的知识点,涵盖选择题、填空题、简答题和编程题四个部分。 一.选择题 1. 计算机科学中,函数func(x)的返回值是多少?这个问题考察了位操作的知识。函数func...

    Java笔试题汇总(125道企业常见java笔试题)

    本资料"Java笔试题汇总(125道企业常见java笔试题)"包含了125个企业在招聘过程中可能会遇到的Java相关问题及其答案,涵盖了Java基础、Javaweb等多个方面,旨在帮助求职者全面了解并准备Java面试。 Java基础部分...

    C/C++几道笔试题

    在C/C++编程领域,笔试题常常用于评估应聘者的编程基础、问题解决能力和逻辑思维能力。下面我们将深入探讨这些题目中可能涉及的关键知识点,并通过分析`test01`这个文件名,推测它可能涵盖的内容。 1. **基本语法**...

    MySQL笔试题33道(附带答案、表结构与数据

    这份资料包含了33道精心挑选的MySQL笔试题,旨在帮助用户深入理解MySQL的核心概念、语法以及实际操作。以下是基于这些资源可能涵盖的一些关键知识点: 1. **基本SQL语句**:包括SELECT查询,用于从数据库中提取数据...

    java程序员笔试题java程序员笔试题

    本资源提供了 Java 程序员笔试题,共 10 道单项选择题和 2 道多项选择题,涵盖了 Java 基础知识、编程技术、数据类型、运算符、控制流程、方法和类等方面的知识点。 1. Java 程序编译后会产生 byte code,而不是 ...

    百度笔试题 百度 笔试题

    【百度笔试题】中的知识点主要涉及三个方面:编程题、算法题和系统设计。下面将分别对这三个方面进行详细的解析。 1. **编程题** 这道编程题要求编写一个函数`is_include(char *a, char *b)`,判断字符串`b`的所有...

    SQL笔试题(转载的)

    这篇文档《2011 SQL笔试题》及其压缩包资源,显然是为了帮助学习者或者应聘者准备SQL相关的面试或笔试而准备的。 SQL的基础知识点包括: 1. **数据类型**:SQL支持多种数据类型,如整数(INT)、浮点数(FLOAT)、...

    操作系统笔试题及答案

    操作系统笔试题及答案 操作系统笔试题及答案是计算机科学中的一门重要课程,对于考研和笔试面试的考生来说尤其重要。以下是操作系统笔试题及答案的详细解释: 1. 在下列系统中,( )是实时系统。 answer:B航空定...

    Java笔试题大集合及答案(另附各大公司笔试题)

    Java作为一门广泛使用的编程语言,其笔试题涵盖了基础语法、数据结构、算法、多线程、网络编程、设计模式等多个方面。本资料集合了大量Java笔试题,旨在帮助求职者全面复习并准备Java相关的笔试环节,同时包含了各大...

    HCIE笔试题库284道.rar

    HCIE笔试题库,含PDF文档和VCE刷题软件

Global site tag (gtag.js) - Google Analytics