注意:本文不会回答为什么,因为我刚学,我也不知道为什么,我们只说怎么实现最基础的链表
简单来说,把数据和指针串在一起,就形成了链表。(废话)
首先我们需要创建一个结构体,来作为节点。
其中一个成员用来存放数据,另一个则用来指向下一个节点。
struct Node
{
int data;
Node* next;
};
接下来定义头指针变量,用来作为链表的起点
同时可以记录一下链表的末尾
Node* head = NULL; //定义头指针变量,以此作为链表的起始点
Node* List_end = NULL; //记录链表的最后一个节点(end不让用qwq)
创建新节点,需要用malloc函数来申请内存空间来存放节点,并设置数据和指向下一个节点的指针
Node* creatNewNode(int value) //创建节点,内存不够则返回空指针
{
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode) {
newNode->data = value;
newNode->next = NULL;
}
return newNode;
}
插入元素,以在开头插入为例
void insertNode(int value)
{
Node* newNode = creatNewNode(value);
if (head == NULL) {
head = newNode;
List_end = newNode; //此时只有一个节点,开头即为末尾
}
else {
newNode->next = head;
head = newNode;
}
}
在末尾插入元素(和开头同理,只是变化的是末尾地址)
void pushbackNode(int value) //在链表末尾插入元素
{
Node* newNode = creatNewNode(value);
if (head == NULL) {
head = newNode;
List_end = newNode;
}
else {
List_end->next = newNode;
List_end = newNode; //记录新的末尾
}
}
删除元素,以删除第一个为例
void delateNode()
{
Node* temp = head;
head = head->next;
free(temp);
}
遍历链表
void iteratorList() //遍历链表,此处以输出所有元素为例
{
Node* it = head;
while (it != NULL) {
printf("%d", it->data);
it = it->next;
}
}
输出链表中的下标为index的值
void printNode(int index) //打印链表中第index个元素
{
index++;
Node* it = head;
while (index--) {
if (!index) {
cout << it->data << endl;
}
else if(it->next!=NULL) {
it = it->next;
}
else {
printf("查无此值\n");
return;
}
}
}
这样就有了一个能实现基本功能的链表了,但是也只是能实现基础功能(
来自一个刚学完链表的蒟蒟蒟蒻,代码写的依托答辩 : (