【问题标题】:C program-linked list-syntaxC 程序链表语法
【发布时间】:2014-11-15 23:54:32
【问题描述】:

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

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

有人能告诉我 while 条件是干什么用的吗?我知道在添加节点后,前一个节点的地址应该从 NULL 更改为下一个节点的地址。但令我困惑的是 while 条件是如何工作的。我的意思是这里的“while (cur)”是什么意思……括号内不应该有一个条件吗?

【问题讨论】:

  • Stackoverflow 不是家庭作业答题网站。
  • 此代码不是 C 语言。将您的问题重新标记为正确的语言或提供有效的 C 示例。

标签: c syntax linked-list


【解决方案1】:

首先要做的事情。在 C 中使用 malloc() 和它的朋友动态分配内存的数据块。常见的成语是这样的:

Node *newNode = malloc(sizeof *newNode);

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

现在回到你的问题:

while (cur) {
    // ...
}

cur 被评估为表达式,您可以认为是真和假(更准确地说,0 被视为假和所有其他值,除了这些可从转换为另一种类型获得的值,例如 0.0 (double ) 被视为真)。将这个特定循环的条件写成这样实际上更具描述性(并且可能对您来说第一眼看起来更直观):

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

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


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

【讨论】:

  • 而且您可能还会注意到代码在空列表上无法正常工作,因为没有办法更新调用代码中的头部。
猜你喜欢
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 2017-11-14
相关资源
最近更新 更多