WindowsCE & Linux 应用开发

从来疾风有劲草,自古沃土少苍松.

导航

面试题

刚才在论坛上看到这样两道有意思的题目,第一题主要考算法,第二题则是考临时思维了
第一题:
 要求通过一次遍历找到链表中倒数第n个节点,链表可能相当大,可使用辅助空间,但是辅助空间的数目必须固定,
 不能和n有关。(注意,只能通过一次遍历,链表长度不确定)
 
 struct iNode {
 int value;
 iNode * next;
 };
 iNode * getresult(iNode * head,int n)
 {
 
 iNode *pfirst;
 iNode *psecond;
 
 pfirst=head;
 int counter;
 
 for(counter=0;counter<n;counter++) {
  pfirst=pfirst->next;
 }
 
 psecond=head;
 
 while(pfirst!=NULL) {
  pfirst=pfirst->next;
  psecond=psecond->next;
 }
 
 return psecond;
 }
 
 这个算法很经典,算法思想:两根指针,第一根先出发,相距n步后第二根出发。然后同时步进,直到第一根指针达到末尾

第二题:
   有四个同样的容器,里面装满了粒数相同的药丸,正常药丸的质量为m,变质药丸的质量为m+1,现在已知这四个容器中,
有一个装的全是变质药丸,用电子秤只称一次,找出哪个容器装的是变质药丸 (Microsoft)
            
             答案:把四个容器依次编号为1、2、3、4,然后从中分别取出1、2、3、4 粒药丸,称这10 粒药丸的质量,如果质量为10m+1,
             则说明第一个容器装的是变质药丸,如果为10m+2 则说明第二个装的变质药丸,依次类推。

posted on 2008-02-29 20:08  zrs  阅读(559)  评论(0编辑  收藏  举报