定义单向列表

struct ListNode {
    int val;
    ListNode *next;
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
    ListNode(int x, ListNode *next) : val(x), next(next) {}
};

这段代码的功能是定义一个名为ListNode的结构体,结构体是一种可以存储多个不同类型数据的复合数据类型。这个结构体有三个成员变量,分别是:

  • val:一个int类型的变量,用来存储链表节点的值。
  • next:一个ListNode类型的指针,用来指向链表节点的下一个节点。
  • ListNode():一个无参的构造函数,用来初始化结构体对象,将val设为0,将next设为nullptr(空指针)。
  • ListNode(int x):一个有一个int参数的构造函数,用来初始化结构体对象,将val设为x,将next设为nullptr。
  • ListNode(int x, ListNode *next):一个有两个参数的构造函数,用来初始化结构体对象,将val设为x,将next设为传入的指针。

这个结构体可以用来表示一个单向链表,单向链表是一种线性数据结构,每个节点都有一个值和一个指向下一个节点的指针。例如,下面的代码可以用来创建一个包含1, 2, 3三个元素的单向链表:

ListNode *head = new ListNode(1); // 创建头节点
head->next = new ListNode(2); // 创建第二个节点,并将头节点的next指向它
head->next->next = new ListNode(3); // 创建第三个节点,并将第二个节点的next指向它

1. 使用基于范围的for循环:这是一种简单而优雅的方法,可以遍历列表中的每个元素,并使用流插入运算符 << 将它们输出到标准输出流 cout 中。例如,如果有一个名为 list 的字符串列表,可以使用以下代码来打印它:

#include <iostream>
#include <list>
void print(std::list<std::string> const &list) {
    for (auto const &i: list) {
        std::cout << i << std::endl;
    }
}

2. 使用 std::copy 函数:这是另一种优雅的方法,可以将列表中的元素复制到一个输出流迭代器中,该迭代器可以连接到标准输出流 cout。需要包含 <algorithm> 和 <iterator> 头文件,并使用 std::ostream_iterator 类型来创建输出流迭代器。例如,如果有一个名为 list 的字符串列表,可以使用以下代码来打印它:

#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
void print(std::list<std::string> const &list) {
    std::copy(list.begin(), list.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}

3. 使用 std::for_each 函数:这是一种使用 STL 算法的方法,可以对列表中的每个元素应用一个函数或者一个 lambda 表达式,并将它们输出到标准输出流 cout 中。需要包含 <algorithm> 头文件,并定义一个接受列表元素类型作为参数的函数或者 lambda 表达式。例如,如果有一个名为 list 的字符串列表,可以使用以下代码来打印它:

#include <iostream>
#include <list>
#include <algorithm>
void print(const std::string &s) {
    std::cout << s << std::endl;
}
void print_list(std::list<std::string> const &list) {
    std::for_each(list.begin(), list.end(), print);
}
// 或者使用 lambda 表达式
void print_list(std::list<std::string> const &list) {
    std::for_each(list.begin(), list.end(),  {
        std::cout << s << std::endl;
    });
}

4. 使用迭代器:这是一种传统的方法,可以使用列表的 begin() 和 end() 方法来获取指向列表首尾的迭代器,并使用 ++ 运算符来逐个访问列表中的元素,并使用流插入运算符 << 将它们输出到标准输出流 cout 中。例如,如果有一个名为 list 的字符串列表,可以使用以下代码来打印它:

#include <iostream>
#include <list>
void print(std::list<std::string> const &list) {
    for (auto it = list.begin(); it != list.end(); ++it) {
        std::cout << *it << std::endl;
    }
}

5. 重载 << 运算符:这是一种高级的方法,可以自定义列表类型和标准输出流 cout 之间的 << 运算符的行为,使得可以直接使用 cout << list 的语法来打印列表。需要重载一个全局函数,接受一个 std::ostream 类型的引用和一个列表类型的常量引用作为参数,并返回一个 std::ostream 类型的引用。例如,如果有一个名为 list 的字符串列表,可以使用以下代码来打印它:

#include <iostream>
#include <list>
std::ostream &operator<<(std::ostream &os, const std::list<std::string> &list) {
    for (auto const &i: list) {
        os << i << std::endl;
    }
    return os;
}
int main() {
    std::list<std::string> list = {"blue", "red", "green"};
    std::cout << list;
    return 0;
}


#include <iostream>
#include <list>
using namespace std;
int main() {
    list<int> lst; // 创建一个空的list容器
    int num; // 用来存储输入的元素
    cout << "请输入一个整数(输入-1结束):";
    cin >> num;
    while (num != -1) { // 循环读取输入的元素,直到输入-1为止
        lst.push_back(num); // 在容器尾部插入元素
        cout << "请输入一个整数(输入-1结束):";
        cin >> num;
    }
    cout << "您输入的列表是:";
    for (auto it = lst.begin(); it != lst.end(); ++it) { // 遍历并输出容器中的元素
        cout << *it << " ";
    }
    cout << endl;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值