我有以下结构:
struct cell {
int nmbr;
struct cell *p;
};
我已经从这种类型创建了一系列链接结构。每个结构都通过* p连接到它的前身。如果我决定使用递归算法打印所有nmbr
,如下所示,我该如何定义停止条件?
void write(struct cell* l) {
/* The following if statement doesn't solve my problem,
but hopefully you see what I'm trying to do */
if (&l != 0x000000) {
printf("%d \t", l->nmbr);
write(l->p);
}
}
答案 0 :(得分:3)
你想要
if (l != 0)
或
if (l != NULL)
当然,您还需要确保链接列表的尾部也p
分配了NULL
;否则它将是未初始化的,可能不是NULL
,但无论如何都是无效的。
答案 1 :(得分:2)
你应该检查'l'不是NULL而不是'& l',假设NULL中的链表终止。
答案 2 :(得分:1)
假设链表不是循环的,您只需在到达空指针时停止。 改变
if (&l != 0x000000)
到
if (l != NULL)
答案 3 :(得分:1)
正如其他人所说,你应该检查l(el),而不是& l,对0或NULL。所以,你的函数看起来应该是这样的:
void write(CELL* l) {
if (l != 0x000000) {
printf("%d \t", l->nmbr);
write(l->p);
}
}
也就是说,使用一段时间很容易完成同样的事情,从而避免了递归的开销:
list_pos = list_head;
while (list_pos != NULL) {
printf("%d \t", list_pos->nmbr);
list_pos = list_pos -> p;
}
答案 4 :(得分:-1)
此处的打印编号为当前节点。
如果(1→!p值= NULL)
写(1→P);