当前位置: 首页 > 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;}

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 前端(四):前后端分离开发(YAPI的使用)
  • 计算机网络中点到点与端到端协议的区别
  • web小游戏开发:拼图(四)对调和移动拼图玩法的实现
  • 自定义 SwiftUI 中符号图像的外观
  • 同一个项目两个页签之间通信之 BroadcastChannel
  • ANN(Approximate Nearest Neighbor)搜索和索引库到底是什么?
  • 为什么knife4j报错,401,404
  • JavaEE 从入门到精通(一) ~ Maven
  • 使用海外服务器解决docke-pull镜像失败的网络问题
  • git 合并多次提交
  • 基于主从Reactor模式的高性能服务器
  • 【视频讲解】Python灰色关联度分析直播带货效用、神经退行性疾病数据
  • 数字**笔试题--链表翻转与list排序笔试题
  • Day 21
  • 智慧农场数字港系统设计与实现
  • python3.6+scrapy+mysql 爬虫实战
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • CentOS7简单部署NFS
  • Fabric架构演变之路
  • JavaScript设计模式系列一:工厂模式
  • JS学习笔记——闭包
  • js作用域和this的理解
  • Leetcode 27 Remove Element
  • Mac转Windows的拯救指南
  • Material Design
  • ng6--错误信息小结(持续更新)
  • PHP 小技巧
  • Protobuf3语言指南
  • Python_OOP
  • Ruby 2.x 源代码分析:扩展 概述
  • 闭包,sync使用细节
  • 二维平面内的碰撞检测【一】
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 使用SAX解析XML
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 《码出高效》学习笔记与书中错误记录
  • Java总结 - String - 这篇请使劲喷我
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • !!java web学习笔记(一到五)
  • ###C语言程序设计-----C语言学习(6)#
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • $.ajax()方法详解
  • (c语言)strcpy函数用法
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (pytorch进阶之路)扩散概率模型
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (第30天)二叉树阶段总结
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (译) 函数式 JS #1:简介
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET 的程序集加载上下文
  • .net 获取某一天 在当月是 第几周 函数