这是一个在链表中添加节点的功能。
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)'在这里意味着什么......括号内是否应该有条件?
答案 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
循环。