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

为何链表print方法出现无限循环?与视频代码一致却异常

链表print方法无限循环问题排查

我参考YouTube视频实现了一个链表的print方法,代码和视频完全一致,但运行时出现无限循环,视频里的代码却正常。同事让我搜"ptrnull",我没搞懂;搜"brad"也找不到原因。我的代码如下:

#include <iostream>
using namespace std;
#define nl endl
struct MyNode {
  int val;  // value
  MyNode *next;  // address

};

class MyLinkedList {
private :
    MyNode *head = NULL;
    int size = 0;

public:
    void insertFirst(int val)
    {
        MyNode *node = new MyNode;
        node->val = val;
        // if the linked list is empty
        if (head == NULL)
        {
            head = node;
        }
        else
        {
            // the linked list is not empty
            node->next = head;
            head = node;
        }

        size++;
    }

    // to print all elements
    void print()
    {
        
        MyNode *temp = head;
        while (temp != NULL)
        {
            cout << temp->val << nl;
            temp = temp->next;
        }
        
    }
    
    int getSize()
    {
        return size;
    }

};

int main() {
   MyLinkedList list1;
   list1.insertFirst(1);
   list1.insertFirst(2);
   list1.insertFirst(3);
   list1.insertFirst(4);

   cout << list1.getSize() << nl;

   list1.print();
   

    return 0;
}

问题原因

核心问题是新创建的MyNode结构体的next指针未初始化:

  • 用new MyNode创建节点时,只会分配内存,不会自动把next设为NULL,它会是一个随机的垃圾值。
  • 插入第一个节点时,head指向这个节点,但它的next不是NULL;后续插入的节点的next虽然指向了前一个节点,但链表的最后一个节点(也就是第一个插入的1)的next是垃圾值,不是NULL。
  • 执行print方法时,temp遍历到最后一个节点后,temp->next不是NULL,循环会继续访问无效内存,陷入无限循环。

解决方案

有两种简单的修复方式:

方式1:创建节点时手动初始化next指针

修改insertFirst方法里的节点创建部分:

MyNode *node = new MyNode;
node->val = val;
node->next = NULL; // 新增这行,手动初始化next为NULL

方式2:给MyNode结构体添加构造函数

让结构体创建时自动初始化成员,避免遗漏:

struct MyNode {
  int val;
  MyNode *next;
  // 构造函数
  MyNode(int value) : val(value), next(NULL) {}
};

同时修改insertFirst里的节点创建代码:

MyNode *node = new MyNode(val); // 直接用构造函数初始化

两种方式都能确保链表的最后一个节点的next是NULL,print方法的循环会正常终止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:44:54