You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 06:45:03