陈博坐在位置上,视野高度不够,完全看不到对方书写的内容,贸贸然站起来旁窥影响不好,所以他选择老实待着。
“我看你的简历有写会很多种编程语言,这里是三道题,都做出来我就要你。”吴忧把写满的纸张递给陈博,坐到对面的椅子上。
内容不多,基本在三句话内,陈博扫了眼,这难度甚至不如培训班专门进行应试训练的题目难。
“你要多久,这三道题。”
“这个啊....”
陈博评估了一下难度,横向比较自己的水平,吴忧既然那么问,很可能考核时间也算在成绩的一部分,不能太长,但又不能过短,免得翻车。
“10分钟吧。”
“10分钟么?”吴忧挤眉板着脸。
“8分钟,我尽量。”陈博以为对方嫌时间太长,于是又缩短了20%。
“年轻人不要把话说得太满。”
“试一试先。”
题目已经认真浏览过,可以直接上手,省去阅卷时间后,光写的话8分钟应该勉勉强强,所以陈博一开始预留多2分钟,想的是做完还能验算遍。
这下把富余的时间锁死,就必然在追求正确率和效率之间存在矛盾。
第一道题是二叉树遍历,吴忧给的是入门级的例题,A是根节点,左右跟分别是B和C,左根的B与D单独相连,而D与E单独相连,右根的C和F、G相连。
要求分别写出先序遍历、中序遍历和后序遍历,先序遍历是按照根左右的顺序沿一定路径经过路径上所有的结点,先根后左再右。
中序遍历相对麻烦点,先遍历左子树,然后访问根结点,最后遍历右子树。
后序遍历大同小异,三者的区别在于遍历顺序,跟一笔画有些许相似之处。
陈博几乎没有思考,行云流水般在上面写上ABDGCEF、DGBAECF和GDBEFCA。
第二题是链表,陈博起初没看仔细,现在重新审题才发现有三个小问。
[从头到尾打印一份单链表]
[在不遍历链表的前提下删除一个无头单链表的非尾节点]
[在不遍历链表的前提下在无头单链表中的一个节点前插入另一个节点]
可惜是手写,如果换做电脑输入的话码起来会快很多,因为单链表有指向性,前一个节点只能指向下一个节点,因此最简单的实现办法就是递归,先遍历再输出。
“好久没手写代码了。”
陈博书写之余还得留心字母的大小写,不一定是换行顶格就非要大写,代码的括号也是重中之重,有的是,有的是(),还有的是{},他特地描多了几笔,好让它们看上去略有不同。
删除非尾节点通过遍历是很好实现的,这里故意增加了难度,不过单链表只有next指针,只指向下一个元素,如果要删除其中一个节点,从删除目标节点的下一个节点入手是个不错的切入点。
首先,把要删除节点的下一个节点值赋予删除节点,再修改删除节点的指向,最后删除下一个节点,就可以实现要求。
代码里有很多特殊符号,陈博在写时连大小长度都统统考虑进去,尽量让它们的比例看上去跟电脑里的差不太多。
他没留意时间,反正吴忧没喊停,自己接着做便是。
“啊嚏~”