原帖由 mhello 于 2007-5-21 11:06 发表
如果有回环,第二个循环是否有死循环的可能?
如:
head->#->#->#->#->#->#->#->
^ |
| ...
原帖由 mhello 于 2007-5-20 18:10 发表
如给定:
typedef struct node {
char ch;
struct node *next;
}node_t;
int isCircle( node_t *head);
以这两个条件如何确定单链表里有环存在?
原帖由 emacsnw 于 2007-5-21 11:41 发表
搜一下前面的帖子吧。提供一个实现:
[
原帖由 福瑞哈哥 于 2007-5-21 12:21 发表
太強了,利用步長來循環。
原帖由 清汤挂面 于 2007-5-21 16:21 发表
呵呵,是很强的,如果有循环,是一定可以追上来的
只是效率上。。。
我有一个想法,如果把遍历过程中所有的节点的地址都hash存起来,那么只要一旦有环,立刻就能发现,岂不是很好
原帖由 福瑞哈哥 于 2007-5-21 00:28 发表
如果是在實際工程中遇到這樣的問題,我一定用hash,馬上就可以想到。
我在c中都是經常挂著glib或apr的庫的。
不過這些人都是搞算法的,又不實際干活。
![]()
原帖由 mhello 于 2007-5-21 11:29 发表
各位大侠,有什么方法可以解决这个问题(先不考虑解决方法的效率问题)?
原帖由 emacsnw 于 2007-5-21 16:45 发表
效率应该不是问题,慢的那个最多绕两圈 -_- ,因此时间复杂度还是O(N)的。
用hash的话需要O(N)的额外空间,时间上还是O(N)。
原帖由 福瑞哈哥 于 5/21/07 16:28 发表
如果是在實際工程中遇到這樣的問題,我一定用hash,馬上就可以想到。
我在c中都是經常挂著glib或apr的庫的。
不過這些人都是搞算法的,又不實際干活。
![]()
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |