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

如何在C++中一行初始化带有初始值的LinkedList?

C++ 中直接初始化带初始值的链表

首先明确:C++ 标准库中并没有名为 LinkedList 的容器,通常我们会用 std::list 来实现双向链表的功能。如果是你自己实现的自定义 LinkedList 类,也可以通过修改构造函数来支持直接初始化。

1. 使用标准库 std::list 直接初始化

C++11 及以后的版本支持初始化列表语法,可以一行完成带初始值的链表声明:

#include <list>

int main() {
    // 两种等价写法,任选其一
    std::list<int> my_list = {1, 2, 3, 4, 5};
    std::list<int> my_list{1, 2, 3, 4, 5};
}

2. 自定义 LinkedList 类支持直接初始化

如果是你自己实现的 LinkedList,需要给类添加对应的构造函数来支持初始值传入:

方式一:支持初始化列表(推荐,兼容任意数量元素)

添加一个接收 std::initializer_list<T> 的构造函数,遍历列表调用你的 add 方法:

#include <initializer_list>

template <typename T>
class LinkedList {
private:
    struct Node {
        T data;
        Node* next;
        Node(T val) : data(val), next(nullptr) {}
    };
    Node* head = nullptr;

public:
    // 初始化列表构造函数
    LinkedList(std::initializer_list<T> init_list) {
        for (const T& val : init_list) {
            add(val);
        }
    }

    // 你的add方法(假设是尾插实现)
    void add(T val) {
        if (!head) {
            head = new Node(val);
        } else {
            Node* curr = head;
            while (curr->next) curr = curr->next;
            curr->next = new Node(val);
        }
    }

    // 析构函数防止内存泄漏
    ~LinkedList() {
        while (head) {
            Node* temp = head;
            head = head->next;
            delete temp;
        }
    }
};

// 使用示例
int main() {
    LinkedList<int> my_list = {1, 2, 3, 4, 5};
}

方式二:支持可变参数(匹配你想要的 LinkedList<int>(1,2,3,4,5) 写法)

C++17 及以后可以用折叠表达式实现可变参数构造函数,直接传入多个元素:

template <typename... Args>
LinkedList(Args&&... args) {
    // 折叠表达式依次调用add方法
    (add(std::forward<Args>(args)), ...);
}

// 使用示例
int main() {
    LinkedList<int> my_list(1, 2, 3, 4, 5);
    // 动态分配的写法(注意new返回指针)
    LinkedList<int>* my_list_ptr = new LinkedList<int>(1, 2, 3, 4, 5);
    delete my_list_ptr; // 记得释放内存
}

注意

你提到的 LinkedList<int> list = new LinkedList<int>(1,2,3,4,5); 写法是错误的:new 操作符返回的是指针类型,正确写法应该是 LinkedList<int>* list = new LinkedList<int>(1,2,3,4,5);,但除非必要,不建议手动管理动态内存,优先使用栈上对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:55:20