C++链表程序为何头、尾节点均输出5而非预期的4和5?
问题原因与修复方案
你的代码里只创建了一个Node对象N,L.head和L.tail都指向这个对象的内存地址。这意味着head和tail本质是同一个节点的引用——你先给head->n赋值4,接着给tail->n赋值5,其实是在修改同一个n变量,最后输出自然都是5。
要实现头节点值为4、尾节点值为5的效果,需要创建两个独立的Node实例,让head和tail分别指向不同的内存空间,再将它们连接起来。修复后的代码如下:
#include <iostream> using namespace std; struct Node { int n; Node *next; }; class LinkedList { public: Node *head = NULL; Node *tail = NULL; }; int main() { LinkedList L; // 创建头节点并赋值 L.head = new Node; L.head->n = 4; L.head->next = NULL; // 创建尾节点并赋值 L.tail = new Node; L.tail->n = 5; L.tail->next = NULL; // 连接头节点与尾节点 L.head->next = L.tail; cout << L.head->n << endl; // 输出4 cout << L.tail->n << endl; // 输出5 // 释放动态分配的内存,避免内存泄漏 delete L.head; delete L.tail; return 0; }
补充说明:
- 用
new动态分配内存,每个节点拥有独立的内存空间,确保head和tail指向不同节点。 - 操作完成后用
delete释放内存,避免内存泄漏。 - 如果后续要添加更多节点,只需重复创建新节点,将当前尾节点的
next指向新节点,再更新tail指向新节点即可。
内容的提问来源于stack exchange,提问作者aci1560
相关产品推荐
相关产品推荐

