这是一个用于在链表中添加节点的函数。
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.0
(double
)被视为真)。实际上,将这个特定循环的条件编写为:
while (cur != NULL) {
// ...
}
这两种形式在您的上下文中在语义上是相同的。
请注意,当cur
时可能根本不会进入while
循环(即 head
参数)为空指针。