C++实现链表添加元素后无输出,代码问题排查求助
问题原因
- 核心问题是
addItem函数的head参数使用值传递:你在函数内修改head = n的操作仅作用于指针的本地副本,main函数中原始的head指针始终保持NULL - 调用
printList时传入的head是空指针,直接跳过了整个遍历打印逻辑,所以终端没有任何输出
修复方案
有两种常见修改方式:
方案1:修改为指针引用传递(更简洁)
将addItem的第一个参数改为指针的引用,这样函数内对head的修改会直接作用到main中的原始指针:
// 仅修改addItem的参数定义即可 void addItem(struct Node* &head, int val) { // 添加&表示参数是指针的引用 struct Node* n = new Node(val); if(head == NULL){ head = n; return; } struct Node* cur = head; while(cur->ptr != NULL){ cur = cur->ptr; } cur->ptr = n; }
方案2:使用二级指针
如果不习惯引用语法,也可以传递指针的地址,通过解引用修改原始指针:
void addItem(struct Node** head, int val) { struct Node* n = new Node(val); if(*head == NULL){ *head = n; return; } struct Node* cur = *head; while(cur->ptr != NULL){ cur = cur->ptr; } cur->ptr = n; } // 调用时需要传入head的地址 addItem(&head, 1); addItem(&head, 2);
修改后重新编译运行,即可正常输出1 2 3 4。
内容的提问来源于stack exchange,提问作者sonu kkc
相关产品推荐
相关产品推荐

