leetcode 刷题挑战之 链表

2021-12-06
1 min read
Featured Image
  • 链表相比如数组, 长度不固定, 可以动态增删.
  • 数组适合查询, 链表适合增删.

203. 移除链表元素

  • 学习了定义 struct 数据结构

    • 用来定义指针: 一个当前值加下一个指针的地址

    • 这是一个自引用型的数据结构,嵌套了

    • 可以在struct 内定义构造函数, 如果不定义则有默认构造函数

// 声明一个链表中的节点.
struct ListNode {
  int val; // 节点存储的元素的值.
  ListNode *next; // 节点存储的指向下一个节点的指针, 这里 next 就是下一个指针的地址.
  ListNode(int x) : val(x), next(NULL) {} // 节点的自定义构造函数.
};

// 通过自定义函数创建节点.
// head 的值为 该节点的地址. 
ListNode *head = new ListNode(5);
// 实验初始化 Books 结构的方式
struct Books {
    string name;
    string author;
};
Books book1; // 不 new 创建实例结构
book1.name = "Harry Potter";
cout << book1.name << endl;
// 实验初始化指向 listnode 指针的方式
ListNode *head = new ListNode(); // 应该只能这样初始化一个指向结构的指针, 如果像上面那样不 new 的话, 无法运行.
head->val = 10;
// 上面两行等价于:
ListNode *head = new ListNode(10);
//输出头部指针的值
cout << "头部指针的值" << head->val << endl;

// 增加节点
ListNode *SecondPtr = new ListNode(20);
head->next = SecondPtr;
  • 下面是易于理解的包含链表构造函数的结构:
struct ListNode
{
    double value;
    ListNode *next;
    //构造函数, 指针默认是空(可用于单链表的末尾节点)
    ListNode(double valuel, ListNode *nextl = nullptr)
    {
        value = value1;
        next = next1;
    }
};
Avatar
Aaron Fan My research interests include machine learning, signal processing, web development and robotics.