C++实现LinkedList追加多个节点后仅打印1个节点问题求修复
问题定位
问题出在appendNode函数的链表遍历与新节点挂载逻辑错误。
错误原因
- 新节点挂载代码
nodePtr->next = newNode;被错误写在了while循环内部:当链表仅存在头节点时,nodePtr->next为NULL,while循环条件不成立,挂载逻辑完全不会执行,除头节点外的所有新节点都没有被接入链表,最终打印时只能看到第一个节点。 - 即便链表已有多个节点,循环内每次移动指针后直接覆盖当前节点的
next指针,会直接清空原有后续节点,造成内存泄漏和链表结构断裂。
修复方案
将新节点挂载逻辑移动到while循环外部,等遍历到链表最后一个节点后再执行挂载操作,修改后的appendNode函数如下:
void appendNode(int d) { Node* newNode = new Node; Node* nodePtr; newNode->data = d; newNode->next = NULL; if (!head) { head = newNode; } else { nodePtr = head; // 遍历到最后一个节点 while (nodePtr->next) { nodePtr = nodePtr->next; } // 挂载新节点 nodePtr->next = newNode; } }
完整可运行修复后代码
#include <iostream> using namespace std; // 节点结构定义 struct Node { int data; struct Node* next; }; // ------------链表类定义----------- class LinkedList { private: Node* head; public: LinkedList() { head = NULL; } //----------- 节点追加函数 ------------ void appendNode(int d) { Node* newNode = new Node; Node* nodePtr; newNode->data = d; newNode->next = NULL; if (!head) { head = newNode; } else { nodePtr = head; while (nodePtr->next) { nodePtr = nodePtr->next; } nodePtr->next = newNode; } } //--------------- 链表内容打印函数-------------- void display() { Node* nodePtr; nodePtr = head; while (nodePtr != NULL) { cout << nodePtr->data << endl; nodePtr = nodePtr->next; } } }; //-------------- 主函数 ------------- int main() { LinkedList ll; ll.appendNode(2); ll.appendNode(21); ll.appendNode(11); ll.display(); return 0; }
运行后输出结果为:
2 21 11
内容的提问来源于stack exchange,提问作者Sadam Khan
相关产品推荐
相关产品推荐

