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

为什么我的链表仅输出一个值?代码问题排查求助

链表仅显示第一个节点的问题修复

你的问题出在insert_node函数的else分支,这段代码完全搞错了链表尾节点的更新逻辑:

else {
    tail = new_node;
    tail->next = new_node;
}

错误原因:

  • 直接将tail替换为新节点,没有把原来的尾节点和新节点建立连接,导致除第一个节点外,其他节点都没有被加入到链表中
  • 让新节点的next指向自己,形成自循环,对链表遍历毫无意义反而会引发异常

修正后的insert_node函数:

void insert_node(int value) {
    Node *new_node = new Node();
    new_node->n = value;
    new_node->next = NULL;

    if (head == NULL) {
        head = new_node;
        tail = new_node;
    }
    else {
        // 先把原尾节点的next指向新节点,完成链表连接
        tail->next = new_node;
        // 再更新tail为新节点,标记新的链表尾部
        tail = new_node;
    }
}

完整修正代码:

#include <iostream>
using namespace std;

struct Node {
    int n;
    Node *next;
};

class LinkedList {
private:
    Node *head;
    Node *tail;

public:
    LinkedList() {
        head = NULL;
        tail = NULL;
    }
    // 补充析构函数,避免内存泄漏
    ~LinkedList(){
        Node *current = head;
        while(current != NULL){
            Node *temp = current;
            current = current->next;
            delete temp;
        }
        head = NULL;
        tail = NULL;
    }

    void insert_node(int value) {
        Node *new_node = new Node();
        new_node->n = value;
        new_node->next = NULL;

        if (head == NULL) {
            head = new_node;
            tail = new_node;
        }
        else {
            tail->next = new_node;
            tail = new_node;
        }
    }

    void show() {
        Node *current = head;

        while (current != NULL) {
            cout << current->n << endl;
            current = current->next;
        }
    }

};

int main() {
    LinkedList L;

    L.insert_node(1);
    L.insert_node(2);
    L.insert_node(4);
    L.insert_node(8);
    L.show();

    return 0;
}

额外说明:

  1. 原代码缺少<iostream>头文件和using namespace std;,否则cout无法正常编译
  2. 原析构函数为空,会导致内存泄漏,这里补充了遍历链表逐个删除节点的逻辑
  3. 将show函数里的临时变量名改为current,比new_node更清晰,避免和插入函数的新节点变量混淆

内容的提问来源于stack exchange,提问作者asvalk1672

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:47:17