- 链表相比如数组, 长度不固定, 可以动态增删.
- 数组适合查询, 链表适合增删.
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;
}
};