C++实现单链表打印时尾节点未输出问题求解
链表头插场景尾节点无法打印问题排查
问题定位
你的头插函数Insert逻辑完全正确,故障点在Print遍历函数的循环终止条件:
- 现有判断
while(temp->link!=NULL)的逻辑是:只要当前节点的后继指针为空就停止循环。而链表最后一个有效节点的link本身就为NULL,遍历到该节点时会直接跳过循环体内的打印逻辑,导致尾节点缺失。 - 该写法还存在空指针风险:当链表为空(
head=NULL)时,首次访问temp->link会直接触发内存访问错误。
修正代码
将循环判断条件改为「当前节点指针是否为空」,覆盖所有有效节点,修正后的Print实现:
void Print() { Node* temp = head; // 节点本身为空才终止遍历,不遗漏任何有效节点 while(temp != NULL) { cout << temp->data << " "; temp = temp->link; } cout << endl; }
效果验证
若依次输入5个值1、2、3、4、5,头插后链表实际顺序为5 -> 4 -> 3 -> 2 -> 1 -> NULL:
- 旧逻辑输出:
5 4 3 2,遗漏尾节点1 - 修正后输出:
5 4 3 2 1,符合预期。
内容的提问来源于stack exchange,提问作者Prajapati Dhruv
相关产品推荐
相关产品推荐

