最新评论
Re:输出1,2,3,..,n的所有组合数 John Rambo 2010-03-13 14:54
强大啊
Re:[面试常见题系列] C程序:如何判断链表是否有环 庄冠华 2009-09-09 09:15
谢谢大家的各种评论,不过需要说明的是:
[b]这两个算法是绝对正确的[/b]
Re:[面试常见题系列] C程序:如何判断链表是否有环 VM Fans 2009-08-25 00:32
不好意思, 我再看了一遍,
q = p->next;
while (p != NULL && q != NULL) {
if (p == q) {
return 1;
}
p = p->next;
if (q->next == NULL) {
return 0;
} else {
q = q->next->next;
}
}
用的原理是如果有环,p移动得“慢”,q移动得“快”,由于是循环链表,所以“慢”的在某个时刻一定能追上“快的!
比如1-2-3-4-5-2 这个列表
p:1-> 2-> 3-> 4-> 5-> 2-> 3->4
q:2-> 4-> 2-> 4-> 2-> 4-> 2->4
在循环了第8次,两者"相交"了!
Re:[面试常见题系列] C程序:如何判断链表是否有环 VM Fans 2009-08-25 00:11
我靠,第二种也是一样的啊
while (p != NULL && q != NULL) {
if (p == q) {
return 1;
}
p = p->next;
if (q->next == NULL) {
return 0;
} else {
q = q->next->next;
}
}
遇上类似是1-2-3-4-5-4
这种的链表,循环根本出不来!
Re:[面试常见题系列] C程序:如何判断链表是否有环 VM Fans 2009-08-25 00:11
我靠,第二种也是一样的啊
while (p != NULL && q != NULL) {
if (p == q) {
return 1;
}
p = p->next;
if (q->next == NULL) {
return 0;
} else {
q = q->next->next;
}
}
遇上类似是1-2-3-4-5-4
这种的链表,循环根本出不来!
Re:[面试常见题系列] C程序:如何判断链表是否有环 VM Fans 2009-08-25 00:07
第一种百分之百有问题
如果是1-2-3-4-5-4
这种的链表
while (q != p) {
if (q == p->next) {
return 1;
}
q = q->next;
}
q 永远不可能== p, q一直在4-5-4-5 这样的死循环,根本出不来!
re: [面试常见题系列] C程序:如何判断链表是否有环 游客5029 2009-05-23 08:38
我觉得第一种是有问题的,只能判断 1—2-3-2
不能判断1-2-3-4-2这种情况。
不能判断1-2-3-4-2这种情况。
re: 打印1,2,3,..,n的全排列 庄冠华 2009-05-21 18:46
没有写错啊,输出是正确的
--引用--------------------------------------------------
pkuoliver: 写错了~~~
for (i=1; i<=n; i++)
{
for (j=0; j<cur; j++)
{
if (a[j] == i)
{
break;
}
if (j>=cur)
{
a[cur] = i;
_p(n, cur+1, a);
}
}
}
}
--------------------------------------------------------
--引用--------------------------------------------------
pkuoliver: 写错了~~~
for (i=1; i<=n; i++)
{
for (j=0; j<cur; j++)
{
if (a[j] == i)
{
break;
}
if (j>=cur)
{
a[cur] = i;
_p(n, cur+1, a);
}
}
}
}
--------------------------------------------------------
re: 打印1,2,3,..,n的全排列 pkuoliver 2009-05-12 19:40
写错了~~~
for (i=1; i<=n; i++)
{
for (j=0; j<cur; j++)
{
if (a[j] == i)
{
break;
}
if (j>=cur)
{
a[cur] = i;
_p(n, cur+1, a);
}
}
}
}
for (i=1; i<=n; i++)
{
for (j=0; j<cur; j++)
{
if (a[j] == i)
{
break;
}
if (j>=cur)
{
a[cur] = i;
_p(n, cur+1, a);
}
}
}
}
