由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - Programming Interview Exposed, 尽信书则不如无书
相关主题
Programming interview exposed 上面的那道NULL or Cycle的linked list题请教一个函数默认返回值的问题,纠结很久了
讨论 Lowest common ancestor of BST鼓起勇气做了一道一直以为很痛苦的题
谈谈面试中化归的思想贡献两个Amazon的电话面试题
讨论一题,去除有序数组的重复元素kth element of two sorted array
请教一个常见的面试题的答案问个rotated array里面找element的问题
FaceBook面经--第二部分问个facebook 面试题
从电面的feedback看细节决定成败M大小的数组中选出前N个元素 (如果M和N都很大)
One Amazon question去掉单向链表中的重复元素 with O(n) time and O(1) (转载)
相关话题的讨论汇总
话题: mbehind话题: current话题: element话题: null话题: next
进入JobHunting版参与讨论
1 (共1页)
j**l
发帖数: 2911
1
书中一个寻找链表倒数第m个元素的例子代码有误,这也恰恰是我们容易在书写白板代
码时候犯的错误,难免给面试官留下粗心的第一印象。
规定,如果m = 0, 则返回最后一个元素(下标从0开始,也可以定义m = 1返回最后一
个元素)
Element *findMToLastElement(Element *head, int m)
{
Element *current, *mBehind;
int i;
current = head;
for (i = 0; i < m; i++)
{
if (current->next)
current = current->next;
else
return NULL;
}
mBehind = head;
while (current->next)
{
current = current->next;
mBehind = mBehind->next;
}
retu
v***u
发帖数: 40
2
thanks a lot for pointing out this. Good luck!
I**A
发帖数: 2345
3
话说这个判断这么致命麽?
上次写一个find prime numbers between 2 and n
发给interviewer之后想起来,没有判断n是否大于1
后来也懒得再发email修改。。

【在 j**l 的大作中提到】
: 书中一个寻找链表倒数第m个元素的例子代码有误,这也恰恰是我们容易在书写白板代
: 码时候犯的错误,难免给面试官留下粗心的第一印象。
: 规定,如果m = 0, 则返回最后一个元素(下标从0开始,也可以定义m = 1返回最后一
: 个元素)
: Element *findMToLastElement(Element *head, int m)
: {
: Element *current, *mBehind;
: int i;
: current = head;
: for (i = 0; i < m; i++)

g**e
发帖数: 6127
4
尽量不要留下话柄给别人

【在 I**A 的大作中提到】
: 话说这个判断这么致命麽?
: 上次写一个find prime numbers between 2 and n
: 发给interviewer之后想起来,没有判断n是否大于1
: 后来也懒得再发email修改。。

v***u
发帖数: 40
5
我觉得这个部分有问题:
while (current)
{
current = current->next;
mBehind = mBehind->next;
}
你找的是m-1 to last不是m to last了,因为mBehind多移动了一个,如果这样写的话。
向大家求教,谢谢!
t********1
发帖数: 799
6
mark

【在 j**l 的大作中提到】
: 书中一个寻找链表倒数第m个元素的例子代码有误,这也恰恰是我们容易在书写白板代
: 码时候犯的错误,难免给面试官留下粗心的第一印象。
: 规定,如果m = 0, 则返回最后一个元素(下标从0开始,也可以定义m = 1返回最后一
: 个元素)
: Element *findMToLastElement(Element *head, int m)
: {
: Element *current, *mBehind;
: int i;
: current = head;
: for (i = 0; i < m; i++)

j**l
发帖数: 2911
7
没有问题的,题目规定m = 0返回最后一个
初始设定current和mBehind的距离是m + 1,然后两个指针同步移动,当current变为
NULL(越过右边界)的时候mBehind即所求。
原来的代码用for (i = 0; i < m; i++)设定两个指针的距离是m, 当current指向最后一个
元素的时候停止同步移动。
改后的代码用for (i = 0; i <= m; i++)设定两个指针的距离是m + 1, 当current为NULL的时候停止同步移动。
当m = 0的时候,current和mBehind的距离是1,当current为NULL的时候mBehind指向最
后一个元素
当m = 1的时候,current和mBehind的距离是2,当current为NULL的时候mBehind指向倒
数第二个元素
如果规定m = 1返回最后一个,只要初始设定current和mBehind的距离是m就可以了

话。

【在 v***u 的大作中提到】
: 我觉得这个部分有问题:
: while (current)
: {
: current = current->next;
: mBehind = mBehind->next;
: }
: 你找的是m-1 to last不是m to last了,因为mBehind多移动了一个,如果这样写的话。
: 向大家求教,谢谢!

v***u
发帖数: 40
8
恩,谢谢耐心讲解,你说的很对,我之前忽略了设置mbehind的指针时候两者的区别,
你这样一讲,我才意识到。很对!
赞!
c**y
发帖数: 172
9
If we want to return NULL when m < 0, can we do as follows?
Element *findMToLastElement(Element *head, int m)
{
if (m < 0) {
return NULL;
}
...
Your current code actually does the same, but I thought the above approach
is better in the sense that it makes the program more understandable. What
do you think?

【在 j**l 的大作中提到】
: 书中一个寻找链表倒数第m个元素的例子代码有误,这也恰恰是我们容易在书写白板代
: 码时候犯的错误,难免给面试官留下粗心的第一印象。
: 规定,如果m = 0, 则返回最后一个元素(下标从0开始,也可以定义m = 1返回最后一
: 个元素)
: Element *findMToLastElement(Element *head, int m)
: {
: Element *current, *mBehind;
: int i;
: current = head;
: for (i = 0; i < m; i++)

1 (共1页)
进入JobHunting版参与讨论
相关主题
去掉单向链表中的重复元素 with O(n) time and O(1) (转载)请教一个常见的面试题的答案
求解一个水塘抽样题FaceBook面经--第二部分
最大增加量的算法从电面的feedback看细节决定成败
用C设计Stack的interface,要求支持各种数据类型。One Amazon question
Programming interview exposed 上面的那道NULL or Cycle的linked list题请教一个函数默认返回值的问题,纠结很久了
讨论 Lowest common ancestor of BST鼓起勇气做了一道一直以为很痛苦的题
谈谈面试中化归的思想贡献两个Amazon的电话面试题
讨论一题,去除有序数组的重复元素kth element of two sorted array
相关话题的讨论汇总
话题: mbehind话题: current话题: element话题: null话题: next