C程序链接列表语法

时间:2014-11-15 23:54:32

标签: c syntax linked-list

这是一个在链表中添加节点的功能。

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条件是如何工作的。我的意思是'while(cur)'在这里意味着什么......括号内是否应该有条件?

1 个答案:

答案 0 :(得分:1)

首先要做的事情。在C中使用malloc()及其朋友动态分配内存的数据块。常见的习语就像:

Node *newNode = malloc(sizeof *newNode);

唐'忘记在free()标准功能不需要时解除分配。此外,您还应始终检查malloc()的返回值,确定其是否成功。

现在回到你的问题:

while (cur) {
    // ...
}

cur被评估为表达式,您可以将其视为真和假(更准确地说0是treatead为false和其他所有值,除了这些值可以从强制转换为另一种类型,例如{{1 }(0.0)被视为真实)。它实际上更具描述性(初看起来可能更直观)将此特定循环的条件写为:

double

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


请注意,当while (cur != NULL) { // ... } (即while参数)为空指针时,可能根本不会输入cur循环。