南哪2022-8-pointer EX 手搓链表
题单介绍
why,链表是个鸡肋,直接上代码,讲解几乎在代码里就够了
```c
#include <stdio.h>
#include <stdlib.h>
//链表的特点在于它占用的内存不像数组那样是连续的,
//这也正导致了链表需要更多的内存用来记录与某一个节点相连的其他节点,且不能直接调用链表当中某个元素的值
//但是链表的好处在于它的内存是动态的,而且从头到尾顺序访问并不受影响
//单独链表的应用范围,抛开没有不谈,还是有一点的
//比如说某些非逼你需要动态维护数组大小的(我不说是哪道题,自己心里清楚
struct ListNode//单个链表节点,这里演示的是两个方向都能查找的链表
{
int data;
struct ListNode *prev, *next;
};
void add(struct ListNode *pos, int data)//在pos指向的元素之后添加一个新的元素
{
struct ListNode *node = malloc(sizeof(struct ListNode));
node->prev = pos;
node->next = pos->next;
if (pos->next != NULL)
pos->next->prev = node;
pos->next = node;
node->data = data;
}
void del(struct ListNode *pos)//删除pos指向的元素
{
if (pos->prev != NULL)
pos->prev->next = pos->next;
if (pos->next != NULL)
pos->next->prev = pos->prev;
free(pos);
}
int main()
{
struct ListNode *list = malloc(sizeof(struct ListNode));//新建一个节点指向链表的开头以方便链表的遍历和添加删除。
list->prev = NULL;
list->next = NULL;
list->data = 114514;
return 0;
}
//代码未经检查,如果有误自己去改,意思到了(
```