有哨兵的双向循环链表:

双向链表有前驱与后继,循环链表有表尾指向表头,那么带哨兵就是从表头直接指向表尾

即:

head.next       为第一个元素

head.next.prev  为最后一个元素

我们从以下几个方面分析这种链表:

  1. 重要方法分析
  2. 全部代码
一.重要方法分析
这里的链表实现了我博客中的接口 ILinkedList 与结点 LinkedNode ,具体的博客地址:http://blog.csdn.net/weixin_35757704/article/details/77894325
void insert(int key):

这里的顺序注意一下,否则可能导致前面的代码执行修改后,后面无法找到对应的位置
int delete():


boolean isEmpty():
二.全部代码
package com.list;/*** 有哨兵的双向循环链表:* 双向链表有前驱与后继,循环链表有表尾指向表头,那么带哨兵就是从表头直接指向表尾* 即 head.next.prev = 最后一个元素* <p>* head.next       为第一个元素* head.next.prev  为最后一个元素*/
public class CirDoubLinkedWithSent implements ILinkedList {LinkedNode head;@Overridepublic void insert(int key) {LinkedNode node = new LinkedNode(key);if (isEmpty()) {head.next = node;head.next.next = node;head.next.prev = node;} else {//把 node 的逻辑弄通node.next = head.next;node.prev = head.next.prev;//处理最后的一个节点的指向问题head.next.prev.next = node;head.next.prev = node;//将 node 真正的放入链表head.next = node;}}@Overridepublic int delete() {assert !isEmpty();int key = head.next.prev.key;head.next.prev = head.next.prev.prev;head.next.prev.prev.next = head.next;return key;}@Overridepublic boolean isEmpty() {return head.next == null;}public CirDoubLinkedWithSent() {head = new LinkedNode(-1);}
}

带有哨兵的双向循环链表相关推荐

  1. C++实现有哨兵的双向循环链表

    C++实现有哨兵的双向循环链表: #include<iostream> #include<stack> using namespace std; template<cla ...

  2. 【数据结构】- 几个步骤教你认识并实现一个链表之带头(哨兵位)双向循环链表(中)

    文章目录 前言

  3. 【数据结构】- 几个步骤教你认识并实现一个链表之带头(哨兵位)双向循环链表(上)

    文章目录 前言

  4. 双向循环链表的插入与删除

    关于解释部分不再多说了,网上资料很多,下面就介绍具体的实现吧 //双向循环链表的插入与删除 typedef struct node{     int data;     struct node *pr ...

  5. 【数据结构】带头节点双向循环链表

    目录 顺序表和链表的区别 带头双向循环链表分析 带头双向循环链表结构: 创建一个节点 哨兵位头节点 打印链表中的值 在pos前插入 删除pos位置的节点 尾插 尾删 头插: 头删 链表元素查找 总代码 ...

  6. 数据结构:带头双向循环链表——增加、删除、查找、修改,详细解析

    读者可以先阅读这一篇:数据结构--单链表的增加.删除.查找.修改,详细解析_昵称就是昵称吧的博客-CSDN博客,可以更好的理解带头双向循环链表. 目录 一.带头双向循环链表的处理和介绍 1.带头双向循 ...

  7. 实现简单的带头双向循环链表

    双向链表 1. 带头双向循环链表的定义 2. 带头双向循环链表的创建 3. 带头双向循环链表的增删改查 (1)头插头删 (2)尾插尾删 (3)pos位置的前插与删除 4.插入与删除改良 1. 带头双向 ...

  8. 数据结构-线性表之带头结点的双向循环链表

    文章目录 前言 实现 (1)结构定义 (2)基本函数 (3)操作实现 测试 代码 前言 链表的类型有很多种(根据带头或不带头,循环或非循环等等),但是我们重点研究的只有两种,一种结构非常简单是无头单向 ...

  9. 单链表、循环链表、双向循环链表总结

    链表介绍 结点的概念: 一个结点包含两个信息,一个是数据域和一个是指针域: 数据域存储该结点的数据信息 指针域存储其直接后继的位置,其示意图如下: 链表的概念: 每个结点的存储单元是独立的,若干个结点 ...

最新文章

  1. sql 双分区查询_优化案例 | 分区表场景下的SQL优化
  2. Majority Element(169) Majority Element II(229)
  3. Java反序列化json内存溢出_反序列化JSON时出现线程错误
  4. 黑客秘笈-渗透测试实用指南 第三版
  5. perl脚本中的特殊字符也与V字符串
  6. JFinal自动扫描表绑定model(包含jar包扫描)
  7. Linux快速构建apache web服务器
  8. Oracle系统表大全(转)
  9. Vue源码:虚拟DOM和diff算法
  10. 概率生成模型-朴素贝叶斯(Naive Bayes)
  11. WPF ICommandSource Implementations Leak Memory!
  12. php5.4 无法连接mongo,php连接MongoDB总是失败,为什么?
  13. [2018.10.25 T3] 旅程
  14. PUN搭建大厅与网络同步
  15. python对excel数据分析常用功能(一文学会如何用Python实现excel基础功能)
  16. Android硬件加速
  17. 基于单片机的功放protues_基于单片机的音乐播放器设计
  18. linux geos 动态库,未经sudo许可在linux上安装GEOS库
  19. 应变式传感器的原理与优点
  20. 【task09】集合运算---内连结

热门文章

  1. mac 不显示 外接屏幕_Mac外接屏幕亮度调整
  2. UE4移动平台上基于物理的着色
  3. Mybatis Interceptor 拦截器
  4. 计算机中的数学【线性代数】向量空间的概念
  5. Apache Kafka
  6. dedecms后台崩溃或者后台访问慢的解决方法
  7. 网络安装centos5.4
  8. html5shiv.js css3,Modernizr, html5shiv, ie7.js, and CSS3 Pie. Which to use and when?
  9. MATLAB学习笔记(十六)
  10. MATLAB学习笔记(十一)