You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

链表while循环疑问求解:为何while(curr->next != NULL)会执行?

链表添加节点中while(curr->next != NULL)循环的作用解析

你的困惑点在于误以为curr->next始终是NULL,但实际上这个循环的作用是找到当前链表的最后一个节点,它会在链表有多个节点时执行,下面结合代码分情况说明:

1. 第一次调用AddNode函数

此时链表为空,head是NULL,函数会进入else分支,直接把新创建的节点n赋值给head。这时候head->next确实是NULL(因为创建n时已经初始化n->next = NULL)。

2. 第二次调用AddNode函数

此时head已经指向第一个节点(不为NULL),进入if分支:

  • curr被赋值为head(也就是第一个节点),此时curr->next是NULL(第一次添加后第一个节点的next没被修改过),所以while(curr->next != NULL)条件不成立,循环不会执行。
  • 直接执行curr->next = n,把第一个节点的next指向新节点n,现在链表有两个节点:第一个节点的next指向第二个节点,第二个节点的next是NULL。

3. 第三次及之后调用AddNode函数

此时链表已有多个节点,进入if分支:

  • curr先指向head(第一个节点),此时curr->next指向第二个节点(不是NULL),所以循环条件成立,执行curr = curr->next,curr现在指向第二个节点。
  • 检查第二个节点的next:如果是最后一个节点,next就是NULL,循环停止;如果还有后续节点,继续循环,直到curr指向链表的最后一个节点(即curr->next == NULL的节点)。
  • 最后执行curr->next = n,把最后一个节点的next指向新节点,完成末尾添加。

关键纠正:

你误以为curr->next从未被初始化,但实际上每次添加新节点时,我们都会把当前最后一个节点的next设置为新节点。当链表存在多个节点时,前面节点的next是指向后续节点的,并不是NULL,这就是循环会执行的原因。


内容的提问来源于stack exchange,提问作者dobby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 08:36:11