/*双向链表特点:
*1.每个节点含有两个引用,previos和next,支持向前或向后的遍历(除头节点)
*2.缺点插入或删除的时候涉及到引用修改的比较多
*注意:下面的双向链表其实也实现了双端链表
*注意:在Java中多个引用可以指向同一个对象,也可以随时改变引用的指向
* 关于修改引用细心一点就可以 引用A = 引用B 表示A引用指向B引用指向的对象
*应用:利用双向链表可以实现双端队列
* */ public class MyDoubleLink {
private Link first;
private Link last; public boolean isEmpty(){
return first == null;
} public void insertFirst(int key){
Link newLink = new Link(key);
if(first == null){
last = newLink;
}
else{
first.previous = newLink;
}
newLink.next = first;//链未断可以指向同一个
first = newLink;
} public void insertLast(int key){
Link newLink = new Link(key);
if(first == null){
first = newLink;
}
else{
last.next = newLink;
newLink.previous = last;
}
last = newLink;
} //插入指定值的后边---其实是一种尾巴插入--此时链表非空才可以操作
public boolean insertAfter(int key,int value){
Link newLink = new Link(value);
Link current = first;
while(current.id != key){
current = current.next;
if(current == null){
return false;
}
}
if(current == last){//find it at last item
newLink.next = null;
last = newLink;
}
else{
newLink.next = current.next;
current.next.previous = newLink;
}
newLink.previous = current;
current.next = newLink;
return true;
} public Link deleteFirst(){
Link temp = first;
if(first.next == null){
last = null;
}
else{
first.next.previous = null;
}
first = first.next;
return temp;
} public Link deleteLast(){
Link temp = last;
if(first.next == null){
first = null;
}
else{
last.previous.next = null;
}
last = last.previous;
return temp;
} //按照值进行删除--可能存在找不到的时候
public Link delete(int key){
Link current = first;
while(current.id != key ){
current = current.next;
if(current == null){
return null;
}
}
if(current == first){//find it at first item并非只有一个节点
first = current.next;
}
else{ //find it not first item
current.previous.next = current.next;
} if(current == last){ //find it at last item
last = current.previous;
}
else{ //find it not last
current.next.previous = current.previous;
}
return current;
} public void diaplayFirstToLast(){
System.out.println("first to last");
Link current = first;
while(current != null){
System.out.print(current.id + " ");
current = current.next;
}
System.out.println();
} public void displayLastToFirst(){
System.out.println("last to first");
Link current = last;
while(current != null){
System.out.print(current.id + " ");
current = current.previous;
}
System.out.println();
}
}

双向链表--Java实现的更多相关文章

  1. 线性链表的双向链表——java实现

    .线性表链式存储结构:将采用一组地址的任意的存储单元存放线性表中的数据元素. 链表又可分为: 单链表:每个节点只保留一个引用,该引用指向当前节点的下一个节点,没有引用指向头结点,尾节点的next引用为 ...

  2. 双向链表-java完全解析

    原文:https://blog.csdn.net/nzfxx/article/details/51728516 "双向链表"-数据结构算法-之通俗易懂,完全解析 1.概念的引入 相 ...

  3. 剑指Offer:面试题27——二叉搜索树与双向链表(java实现)

    问题描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 思路: 将树分为三部分:左子树,根结点,右子树. 1.我们要把根结点与左 ...

  4. 双向链表JAVA代码

      //双向链表类 publicclassDoubleLinkList{       //结点类     publicclassNode{           publicObject data;   ...

  5. LRU hashMap(拉链) + 双向链表 java实现

    //基于 hash (拉链法) + 双向链表,LRUcache //若改为开放寻址,线性探测法能更好使用cpuCache public class LRU { private class Node { ...

  6. 《剑指offer》面试题27 二叉搜索树与双向链表 Java版

    (将BST改成排序的双向链表.) 我的方法一:根据BST的性质,如果我们中序遍历BST,将会得到一个从小到大排序的序列.如果我们将包含这些数字的节点连接起来,就形成了一个链表,形成双向链表也很简单.关 ...

  7. 双向链表——Java实现

    双向链表 链表是是一种重要的数据结构,有单链表和双向链表之分:本文我将重点阐述不带头结点的双向链表: 不带头结点的带链表 我将对双链表的增加和删除元素操作进行如下解析 1.增加元素(采用尾插法) (1 ...

  8. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  9. JAVA单向/双向链表的实现

    一.JAVA单向链表的操作(增加节点.查找节点.删除节点) class Link { // 链表类 class Node { // 保存每一个节点,此处为了方便直接定义成内部类 private Str ...

随机推荐

  1. linux c函数指针的应用

    头文件:1.h #include<stdio.h> int nul_func(); int test1(int a,int b); int test2(int a,int b,int c) ...

  2. [04] Cookie概念和基本使用

    1.Cookie是什么 Cookie,中文名称为"小型文本文件"或"小甜饼",指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密). 很多网站 ...

  3. Intellij idea 断点调试

    前言 之前使用Intellij Idea断点调试都是极其简单的,都是下一步下一步下一步这样子-..还有最坑爹的以为:IDEA只能调试一次.调试完就要重启Tomcat服务器-..因此花了大量的冤枉时间- ...

  4. 关于极光推送Jpush的demo

    关于极光推送Jpush 推送是手机app必不可少的一样功能,这次由于公司项目需要研究了一下.由于推送一般写于服务端,所以对于不会Android的javaweb程序员要写出一个完整的demo是一件很头痛 ...

  5. 轻松把你的项目升级到PWA

    什么是PWA PWA(Progressive Web Apps,渐进式网页应用)是Google在2015年推出的项目,致力于通过web app获得类似native app体验的网站. 优点 1.无需客 ...

  6. 关于sping quartz定时执行理解与思考

    转载请注明原创出处,谢谢! 一直以为自己理解spring quartz,忽然最近几天发现自己理解的不对,在4月18号的时候,我执行了一个spring quartz的计划如下: 1 0 0 */3 * ...

  7. 再说AutoComplete

    一.简述 昨天support一同事,帮她的客户做类似下面的效果(自动完成): 以前在搜房的时候,弄过这个,调用楼盘字典: 这是一个小功能,也是一个大功能.因为它可以做大,也可以做小. 二.搜房的Aut ...

  8. 集成Mybatis

    本文根据个人喜好记录"腾讯课堂"的<Java项目之Maven+SpringMVC+Spring+Mybatis+MySql消费查询系统>视频教程关键步骤信息,视频地址: ...

  9. TCP/IP笔记

    TCP/IP 连接 三次握手 TCP/IP 四次分手 @TODO TIME_WAIT 状态 有三种状态可以进入此状态 1.由FIN-WAIT-2,双方不同时发起FIN,主动关闭的一方在完成自身发起的关 ...

  10. WebApi实现原理解析笔记

    这是我看过WebApi实现代码后的一些总结,一方面加深自己的记忆,另外也希望能够帮助大家更深入的了解WebApi. 注:暂时没有好好的整理,可能有些晦涩难懂. Webapi 控制器类必须实现IHttp ...