当前位置: 首页 > article >正文

链表学习的疑惑

在这段代码中,错误出现在以下部分:

struct Node temp = *head;
while(temp != NULL){
    printf("%d ",temp->data);
    temp = temp->next;
}

错误分析

  1. 错误的类型使用:

    • struct Node temp = *head; 会将 head 指向的节点的内容复制到 temp 变量中。
    • temp 是一个实际的 struct Node 结构体变量,而不是一个指针。因此,temp 不能直接像指针一样用在循环中。
  2. 循环条件不正确:

    • temp 是一个结构体,而不是指针,所以 while(temp != NULL) 这样的条件检查是不合适的。temp 不是一个指针,不能和 NULL 进行比较。
  3. temp 不能直接更新:

    • 在循环中,temp 是一个结构体变量,所以 temp = temp->next 是不正确的。temp->next 是一个指针,而 temp 是一个结构体,它们的类型不同。

如何修正

如果你想要遍历链表,你需要使用一个指针来遍历节点,而不是一个结构体变量。

struct Node *temp = head;
while(temp != NULL){
    printf("%d ",temp->data);
    temp = temp->next;
}

修正后的解释

  1. 使用指针 temp:

    • struct Node* temp = head; 声明了一个指针 temp,并将其初始化为 head,使其指向链表的第一个节点。
    • temp 可以通过 temp = temp->next 来遍历链表中的节点。
  2. 正确的循环条件:

    • while (temp != NULL) 检查 temp 是否为 NULL,从而确定是否还有下一个节点。temp 指针在遍历链表时逐个指向每个节点,直到 NULL(即链表的末尾)。

总结

  • 在遍历链表时,需要使用指针来指向节点,而不能直接使用结构体变量。
  • 使用 struct Node* temp 指向链表的头节点,并通过 temp = temp->next 逐步遍历各个节点。
  • 直接复制一个结构体(如 struct Node temp = *head;)会创建一个独立的结构体副本,它无法继续通过 next 指针遍历链表。

 


http://www.kler.cn/a/369174.html

相关文章:

  • 斜杠往哪斜、路径绝对还是相对,终端目录切换不再迷茫
  • springmvc-springsecurity-redhat keycloak SAML2 xml实现
  • Kafka如何控制消费的位置?
  • DICOM 基础知识:深入理解DICOM数据结构与标签说明
  • Kafka-Eagle(可视化监控平台)安装教程
  • 安卓屏幕息屏唤醒
  • etcd之etcd分布式锁及事务(四)
  • [Web安全 网络安全]-反序列化漏洞
  • 【rabbitmq】rabbitmq工作模式
  • 震惊!25岁普信男又思索出自己的成功学?
  • 机器学习之 AdaBoost(Adaptive Boosting)
  • web相关知识学习笔记
  • MFC扩展库BCGControlBar Pro v35.1新版亮点 - 改进编辑控件性能
  • AI创作者与人类创作者的协作模式
  • 本地搭建Trilium Notes轻松创建个人知识库并实现远程查看文档资料
  • python 实现一个简单的浏览器引擎
  • Springboot整合原生ES依赖
  • 【力扣 + 牛客 | SQL题 | 每日3题】SQL大厂面试题SQL156, 157
  • 软考中级嵌入式系统设计师笔记分享(一)
  • Seatunnel和Seatunnel-web部署-linux
  • 【脚本】B站视频AB复读
  • 无人机之红外探测技术篇
  • [含文档+PPT+源码等]精品基于PHP实现的培训机构信息管理系统的设计与实现
  • 我用自研引擎做游戏:《干得好,托尼》
  • 【NOIP提高组】 自由落体
  • 网络编程 Linux环境 C语言实现