网站网址前的小图标怎么做,ensp企业网络拓扑图,西安计算机培训机构,哪里有门户网站开发公司#x1f496;#x1f496;#x1f496;欢迎来到我的博客#xff0c;我是anmory#x1f496;#x1f496;#x1f496; 又和大家见面了 欢迎来到动画详解数据结构系列 用通俗易懂的动画的动画使数据结构可视化 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低… 欢迎来到我的博客我是anmory 又和大家见面了 欢迎来到动画详解数据结构系列 用通俗易懂的动画的动画使数据结构可视化 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭建个人网站 专栏:动画详解leetcode算法题 C语言知识 今天我们来了解一个全新的数据结构链表 话不多说直接开始 文章目录 链表概念链表的定义 单链表尾插动画详解尾插 头插动画详解头插 在指定位置之前插入动画详解在指定位置之前插入元素 在指定位置之后插入动画详解在指定位置之后插入 删除指定位置之前的元素动画详解删除指定位置之前元素 删除指定位置之后的元素动画详解删除指定位置之后的元素 链表的销毁 总结 链表概念 什么是链表链表是一种通过指针串联在一起的线性结构每一个节点由两部分组成一个是数据域一个是指针域存放指向下一个节点的指针最后一个节点的指针域指向null空指针的意思。 链表的入口节点称为链表的头结点也就是head。 ——来自代码随想录 链表的定义
// 定义一个链表结构体
struct ListNode
{DataType val; // 链表存储的数据struct ListNode* next;// 指向下一个节点的指针
};单链表 由于不带哨兵位也就是虚拟头节点我们需要对链表的头节点进行单独判断 尾插
// 开辟新节点
LN* BuyNode(DataType x)
{LN* new (LN*)malloc(sizeof(LN));if (new NULL){perror(malloc failed);return;}new-val x;new-next NULL;return new;
}// 链表尾插
void LNPushBack(LN** pplist, DataType x)
{assert(pplist);LN* new BuyNode(x);if (*pplist NULL){*pplist new;}else{// 找尾LN* ptail *pplist;while (ptail-next){ptail ptail-next;}ptail-next new;}
}动画详解尾插 头插
// 链表头插
void LNPushFront(LN** pplist, DataType x)
{assert(pplist);LN* new BuyNode(x);if (*pplist NULL){*pplist new;}else{LN* pfront new;pfront-next *pplist;// 让pfront成为新的头节点也就是更新pplist的位置使其成为新的头节点*pplist pfront;}
}动画详解头插 在指定位置之前插入
// 在指定位置之前插入数据
void LNInsert(LN** pplist, LN* pos, DataType x)
{assert(*pplist pos);LN* new BuyNode(x);LN* prev *pplist;while (prev-next ! pos){prev prev-next;}new-next pos;prev-next new;
}动画详解在指定位置之前插入元素 在指定位置之后插入
// 在指定位置之后插入数据
void LNInsertAfter(LN* pos, DataType x)
{assert(pos);LN* new BuyNode(x);new-next pos-next;pos-next new;
}动画详解在指定位置之后插入 删除指定位置之前的元素
// 删除指定位置数据
void LNDelPos(LN** pplist, LN* pos)
{assert(pplist *pplist);assert(pos);// 如果pos是头节点if (pos *pplist){*pplist pos-next;free(pos);pos NULL;}// pos不是头节点LN* prev *pplist;while (prev-next ! pos){prev prev-next;}prev-next pos-next;free(pos);pos NULL;
}动画详解删除指定位置之前元素 删除指定位置之后的元素
// 删除指定位置之后的数据
void LNDelAfter(LN* pos)
{assert(pos);LN* pcur pos-next;pos-next pos-next-next;free(pcur);pcur NULL;
}动画详解删除指定位置之后的元素 链表的销毁
// 销毁链表
void LNDestroy(LN** pplist)
{LN* cur *pplist;while (cur){LN* next cur-next;free(cur);cur next;}
}总结 更多内容持续更新中 请各位多多关注我哦 我们后会有期