作者adrianshum (Alien)
看板C_and_CPP
标题Re: [问题] 程式的逻辑问题
时间Mon Apr 27 18:21:40 2009
※ 引述《shadown ()》之铭言:
: 最近遇到一个面试官,有问到我一个问题,是关於串列
: 方面的。
: 题目是:连续输入几个数字,最後输入零表示程式结束。
: 之後再输入一个数字,将前面输入的数字与此
: 数比较,印出比此数大的数字。
: 我的解答,是用while来判断串列中的data值是否为零,
: 是的话表示资料已经到最後一笔,结束比较大小的判断。
: 面试官的解答,是用while来判断串列中的next值是否为
: NULL,是的话表资料已经到最後一笔,结束比较大小的判
: 断。
: 面试官的回答虽然在逻辑上是比较合理,但我觉得我的方
: 法应该也不能算错,毕竟题目是说用零来当结束。所以想
: 请教一下各位前辈,我这样算是错的吗?
补充一点, 一般的写法也不是像考官说的那种.
通常是检查 pointer 本身是不是 null, 而不是
next 是不是 null. (当然, 考官说的要写也写得出来)
for(node* p = myList; p != NULL; p = p->next) {
// do something on p
}
如果检查的是 p->next 是否 null 就比较麻烦了
(一时想不到比较好看的写法)
if (myList != null) {
node * p = null;
do {
p = ((p == NULL)? myList : p->next);
// do something with p
} while (p->next != null)
超难看 XDD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 202.155.236.82
1F:推 VictorTom:个人觉得拿next判断也很常见, 不过用next判断有一个问题 04/27 18:53
2F:→ VictorTom:是, 要先确定第一个node本身是不是null或保证一定有值:) 04/27 18:54
3F:推 ledia:换成 while ((p=p->next) != null); 会不会太丑 ? XD 04/27 18:57
4F:→ adrianshum:嗯, 可是严格来说那也是检查 p 而不是检查 next呀 04/27 19:00
想了一想, 修改过, 有好看一点了 :P
不过我还是比较喜欢第一种
※ 编辑: adrianshum 来自: 202.155.236.82 (04/27 19:03)
5F:推 VictorTom:小弟我记得之前写list时, always让list有个dummy的head, 04/27 19:06
6F:→ VictorTom:之後的判断就可以直接while或for判断p->next是否null了. 04/27 19:07
7F:→ VictorTom:现在想一想, 似乎直接判断p就好了, 还省1个node的空间XD 04/27 19:08
8F:推 VictorTom:当时这麽做, 是因为我很懒的判断现在有没有第一笔资料, 04/27 19:10
9F:推 shadown:第一种写法好棒!原来指标可以用for来判断,又学了一招。 04/27 19:10
10F:推 ledia:我也是习惯用个 dummy head .... 04/27 19:10
11F:→ VictorTom:是不是需要建head node等等; 所以固定开个dummy head:) 04/27 19:11
12F:→ VictorTom:l大(握)....XD check eax和eax加固定bias不晓得有没有 04/27 19:13
13F:→ VictorTom:performance上的差距, 虽然看起来都是一条inst解决@_@" 04/27 19:13
14F:→ VictorTom:check的地方忘了 [], 果然我和asm不熟....Orz 04/27 19:14
15F:→ adrianshum:我倒没有做过 dummy head 耶. 有一个 dummy node 总 04/27 19:15
16F:→ adrianshum:觉得有点怪怪的 XD 倒是通常外面包一个 struct (C 的 04/27 19:16
17F:→ adrianshum:年代) 比较多. 04/27 19:16
18F:推 VictorTom:糟~~小弟我记忆体只有128M跑98的时候就在开dummy了XDDD 04/27 19:32
19F:推 Yshuan:dummy就跟阵列边界值多宣1个一样 省事但是费空间罗~ 04/27 22:07
20F:→ adrianshum:我学 programming 的年代是 95 + P-133 + 32MB RAM XD 04/28 01:44
21F:推 VictorTom:再说下去等下就有人拿洞洞卡写程式了这我哪受得了XD 04/28 01:46
22F:→ VictorTom:不过, 以前写程式的时候真的是有一堆乱七八糟乱用的. 04/28 01:47
23F:→ VictorTom:现在工作是把乱七八糟的程式加/修一些乱七八糟的代码Orz 04/28 01:48