C++链表递归打印时最后一个元素无限输出问题求助
代码存在的问题
- 核心死循环问题:
print_list方法中错误使用while循环触发递归调用。只要当前节点的next指针不为空,就会反复调用下一个节点的print_list方法,递归返回后while的判断条件仍然成立,导致无限重复触发下一个节点的打印逻辑,最终表现为最后一个元素被反复打印。只需要把while修改为if即可修复该问题。 - 函数返回值不匹配问题:
add方法声明返回Node类型,但函数体内没有任何返回语句,属于未定义行为,会引发不可预期的运行错误。建议将add方法的返回值修改为void。 - 附加问题:代码中通过
new申请的节点内存没有对应的释放逻辑,会产生内存泄漏,可按需添加析构函数处理内存回收。
修复后参考代码
#include <iostream> using namespace std; class Node { public: Node* next; int data; Node() { this->data = 0; this->next = NULL; } // 修改返回值为void void add(int data) { Node* node_t = new Node(); node_t->data = data; node_t->next = NULL; this->next = node_t; } void print_list() { cout<<"data in list is "<< this->data << endl ; // while改为if if(this->next != NULL) this->next->print_list(); } // 按需添加析构函数回收内存 ~Node() { delete next; } };
内容的提问来源于stack exchange,提问作者maddy0812
相关产品推荐
相关产品推荐

