链表类实例元素计数异常修复咨询:调用addNodeFront/Back后len统计值与实际元素数量不符
问题分析与修复方案
咱们来一步步揪出问题所在:你遇到的getLen()返回值和实际节点数不匹配的核心原因是第一次添加节点时没有更新len变量。
仔细看addNodeFront和addNodeBack的逻辑:当链表为空(head和tail都是nullptr)时,你只完成了头、尾节点的赋值就直接return了,完全没给len做自增操作。而第二次添加节点时,因为链表已经不为空,才会执行this->len++,最终导致len只增加了一次,比实际节点数少1。
需要修改的核心位置
你需要给两个添加节点的函数里的空链表分支都加上len自增的操作,另外顺便修复一下带参数的构造函数(避免后续使用时踩同样的坑):
1. 修复addNodeFront函数
void addNodeFront(Node* node) { if(head==nullptr && tail==nullptr) { this->head = node; this->tail = node; this->len++; // 新增这行,空链表添加第一个节点时更新长度 return; } Node* secondFirst = this->head; this->head = node; node->next = secondFirst; this->len++; }
2. 修复addNodeBack函数
void addNodeBack(Node* node) { if(head==nullptr && tail==nullptr) { this->head = node; this->tail = node; this->len++; // 新增这行,空链表添加第一个节点时更新长度 return; } this->tail->next = node; this->tail = node; this->len++; }
3. 可选:修复带参数的构造函数
如果之后会用到这个构造函数创建链表,记得初始化len:
LinkedList(Node* node) { this->head = node; this->tail = node; this->len = 1; // 初始化长度为1 }
验证效果
修改后运行你的main函数,getLen()会返回2(和实际节点数一致),遍历输出也会是4->2->,完全符合预期。
另外提醒一句:如果之后要实现删除节点的功能,记得也要同步更新len变量,不然又会出现长度不匹配的问题哦~
内容的提问来源于stack exchange,提问作者Akhmad Zaki
相关产品推荐
相关产品推荐

