C 程序链表语法



这是一个用于在链表中添加节点的函数。

void addNode(struct Node *head, int n) {
    Node *newNode = new Node;
    newNode->data = n;
    newNode->next = NULL;
    Node *cur = head;
    while(cur) {
        if(cur->next == NULL) {
            cur->next = newNode;
            return;
        }
        cur = cur->next;
    }
}

有人可以告诉我这里的条件是什么吗?我知道添加节点后,前一个节点的地址应该从 NULL 更改为下一个节点的地址。但让我感到困惑的是 while 条件将如何工作。我的意思是这里的"虽然(cur)"是什么意思...括号内不应该有条件吗?

首先要做的事。在 C 语言中,使用 malloc() 及其友元来动态分配内存的数据块。常见的成语是这样的:

Node *newNode = malloc(sizeof *newNode);

不要忘记在标准函数不需要时free()释放它。此外,您还应该始终检查 malloc() 的返回值,确定它是否成功。

现在回到你的问题:

while (cur) {
    // ...
}

cur被评估为表达式,你可以认为真和假(更准确地说0被视为假值和所有其他值,除了这些可以从强制转换为另一种类型,例如 0.0double)被视为真)。实际上,将这个特定循环的条件编写为:

while (cur != NULL) {
    // ...
}

这两种形式在您的上下文中在语义上是相同的。


请注意,当cur时可能根本不会进入while循环(即 head参数)为空指针。

相关内容

  • 没有找到相关文章

最新更新