【发布时间】:2011-12-29 10:24:01
【问题描述】:
我在一次采访中被问到单链表是否有循环。我已经搜索了这个 SO 并找到了几个答案面试问题:如何检测链接列表中的循环?我以前知道这些答案,但不知何故我回答的答案与我在讨论中想到的不同很久以前和朋友在一起,但我不确定答案是否正确。如果自己尝试,它会按预期工作。不知何故,面试官不高兴。有人可以澄清这有什么问题吗?
struct node {
int flag;
struct node *next;
}
我的想法不是使用两个指针并进行不同的跳跃,而是使用单个指针并遍历每个节点,例如:
node = node->next;
只有当我遍历节点并每次检查时,我都会将标志变量设置为 1,例如
if (node->flag)
{
return TRUE; // implies list is a loop
}
else{
node->flag = 1;
}
除了效率之外,这种方法还有什么问题?
【问题讨论】:
-
请参阅stackoverflow.com/questions/34249/… 以及链接到那里的问题以了解其他方法。
-
@delnan :是的,我也经历过这个问题。我主要涵盖了 SO 中的所有相关问题。但是,我的问题是要了解这种方法有什么问题。
-
此类问题仅在您之前阅读过此类问题并熟悉答案的情况下显示。我永远不会用它来衡量开发人员的技能。
标签: c data-structures