打印链接结构的停止条件?

时间:2010-02-02 15:58:31

标签: c recursion struct pointers

我有以下结构:

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);
    }
}

5 个答案:

答案 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);