当前位置: 首页 > news >正文

带头双向循环链表(一)

今天我们来学习带头双向链表

带头双向循环链表的解释

带头双向链表顾名思义就是:

1、带了一个“头”在数据结构中的意思就是加了一个"哨兵位"。

2、这个链表是双向循环的链表即可以通过任意的节点访问它的上一个和下一个的节点也能通过链表的头直接访问到链表的尾部。

带头双向循环链表的实现

带头双向循环链表的要求和单项循环链表的要求一样:头插,尾插,头删,尾删,查找,打印,前置插入,定点删除,链表销毁等要求要实现。

一、链表的头插
思路解析:

               直接找到头结点的下一个,然后把创建的新节点和头结点连上去就行。

代码实现:
void LTPushFront(LTNode* phead, LTDateType x)
{assert(phead);LTNode* newnode = GreateLTNode(x);LTNode* first = phead->next;phead->next = newnode;newnode->next = first;newnode->prev = phead;first->prev = newnode;
}
二、链表的尾插
思路解析:

                直接使用prev的指针找到最后的节点插入并与头结点和倒数第二个节点连接上即可。

代码实现:
void LTPushBank(LTNode* phead, LTDateType x)
{LTNode* tail = phead->prev;LTNode* newnode = GreateLTNode(x);tail->next = newnode;newnode->prev = tail;newnode->next = phead;phead->prev = newnode;
}
三、链表的头删
思路解析:

                找到第一个和第二个节点直接把头结点和第二个节点直接连接起来最后free第一个节点即可。

代码实现:
void LTPopFront(LTNode* phead)
{assert(phead);assert(phead->next != phead);LTNode* cur = phead->next->next;LTNode* tail = phead->next;phead->next = cur;cur->prev = phead;free(tail);tail = NULL;
}
四、链表的尾删
思路解析:

                找到倒数第二个节点然后直接连接到头结点,free最后一个节点即可。

代码实现:
void LTPopBank(LTNode*phead)assert(phead);assert(phead->next != phead);LTNode* tail = phead->prev;LTNode* tailprev = tail->prev;free(tail);tailprev->next = phead;phead->prev = tailprev;}

剩下的几个接口我们会在明天继续完成,如有错误还请大佬们敬请指出,谢谢大家的关注谢谢。

http://www.lryc.cn/news/417518.html

相关文章:

  • 深入理解Win32K.sys的工作原理
  • 力扣面试经典算法150题:删除有序数组中的重复项
  • 文本加密工具类-支持MD5、SHA1、SHA256、SHA224、SHA512、SHA384、SHA3、RIPMD160算法
  • LVS集群中的负载均衡技术
  • Java网络编程——HTTP协议原理
  • java之多线程篇
  • 【深度学习】TTS,CosyVoice,训练脚本解析
  • 《Unity3D网络游戏实战》学习与实践
  • Machine_Matrix打靶渗透【附代码】(权限提升)
  • 代码随想录算法训练营Day22 | Leetcode 77 组合 Leetcode 216 组合总和Ⅲ Leetcode17 电话号码的字母组合
  • 【微信小程序实战教程】之微信小程序中的 JavaScript
  • K-近邻算法(一)
  • 从零开始之AI视频制作篇
  • Java之TCP编程综合案例
  • 【数据分析---Pandas实战指南:精通数据查询、增删改操作与高效索引和列名操作管理】
  • Spring Cloud全解析:注册中心之Eureka服务获取和服务续约
  • 三相整流电路交流侧谐波仿真分析及计算
  • 了解Java中的反射,带你如何使用反射
  • 【c++】基础知识——快速入门c++
  • AI学习记录 - 自注意力机制的计算流程图
  • JavaScript快速入门,满满干货总结,快速掌握JS语法,DOM,BOM,事件
  • 【C++】C++入门基础【类与对象】
  • Qt | QScatterSeries 散点图
  • 无缝协作的艺术:Codigger 视频会议(Meeting)的用户体验
  • C基础练习(学生管理系统)
  • 网络安全抓包封包WEB
  • Spring Boot - 在Spring Boot中实现灵活的API版本控制(上)
  • 普中51单片机:DS18B20温度传感器操作指南(十三)
  • 【网络】网络的发展历程及其相关概念
  • 鸿蒙HarmonyOS开发:如何使用第三方库,加速应用开发