双向链表:就是有双向指针,即双向的链域。\x0d\x0a链结点的结构:\x0d\x0a┌────┬────┬────────┐\x0d\x0a│ data │ next │ previous │\x0d\x0a└────┴────┴────────┘\x0d\x0a双向链表不必是双端链表(持有对最后一个链结点的引用),双端链表插入时是双向的。\x0d\x0a有两条链:一条从头到尾,一条从尾到头,删除遍历时也是双向的。\x0d\x0a/**\x0d\x0a * 双向链表\x0d\x0a */\x0d\x0apublic class DoublyLinkedList {\x0d\x0aprivate Link head //首结点\x0d\x0aprivate Link rear //尾部指针\x0d\x0apublic DoublyLinkedList() { }\x0d\x0apublic T peekHead() {\x0d\x0aif (head != null) {\x0d\x0areturn head.data\x0d\x0a}\x0d\x0areturn null\x0d\x0a}\x0d\x0apublic boolean isEmpty() {\x0d\x0areturn head == null\x0d\x0a}\x0d\x0apublic void insertFirst(T data) {// 插入 到 链头\x0d\x0aLink newLink = new Link(data)\x0d\x0aif (isEmpty()) {//为空时,第1次插入的新结点为尾结点\x0d\x0arear = newLink\x0d\x0a} else {\x0d\x0ahead.previous = newLink//旧头结点的上结点等于新结点\x0d\x0a}\x0d\x0anewLink.next = head//新结点的下结点旧头结点\x0d\x0ahead = newLink//赋值后,头结点的下结点是旧头结点,上结点null\x0d\x0a}\x0d\x0apublic void insertLast(T data) {//在链尾 插入\x0d\x0aLink newLink = new Link(data)\x0d\x0aif (isEmpty()) {\x0d\x0ahead = newLink\x0d\x0a} else {\x0d\x0arear.next = newLink\x0d\x0a}\x0d\x0anewLink.previous = rear\x0d\x0arear = newLink//赋值后,尾结点的上结点是旧尾结点,下结点null\x0d\x0a}\x0d\x0apublic T deleteHead() {//删除 链头\x0d\x0aif (isEmpty()) return null\x0d\x0aLink temp = head\x0d\x0ahead = head.next//变更首结点,为下一结点\x0d\x0aif (head != null) {\x0d\x0ahead.previous = null\x0d\x0a} else {\x0d\x0arear = null\x0d\x0a}\x0d\x0areturn temp.data\x0d\x0a}\x0d\x0apublic T deleteRear() {//删除 链尾\x0d\x0aif (isEmpty()) return null\x0d\x0aLink temp = rear\x0d\x0arear = rear.previous//变更尾结点,为上一结点\x0d\x0aif (rear != null) {\x0d\x0arear.next = null\x0d\x0a} else {\x0d\x0ahead = null\x0d\x0a}\x0d\x0areturn temp.data\x0d\x0a}\x0d\x0apublic T find(T t) {//从头到尾find\x0d\x0aif (isEmpty()) {\x0d\x0areturn null\x0d\x0a}\x0d\x0aLink find = head\x0d\x0awhile (find != null) {\x0d\x0aif (!find.data.equals(t)) {\x0d\x0afind = find.next\x0d\x0a} else {\x0d\x0abreak\x0d\x0a}\x0d\x0a}\x0d\x0aif (find == null) {\x0d\x0areturn null\x0d\x0a}\x0d\x0areturn find.data\x0d\x0a}\x0d\x0apublic T delete(T t) {\x0d\x0aif (isEmpty()) {\x0d\x0areturn null\x0d\x0a}\x0d\x0aLink current = head\x0d\x0awhile (!current.data.equals(t)) {\x0d\x0acurrent = current.next\x0d\x0aif (current == null) {\x0d\x0areturn null\x0d\x0a}\x0d\x0a}\x0d\x0aif (current == head) {\x0d\x0ahead = head.next\x0d\x0aif (head != null) {\x0d\x0ahead.previous = null\x0d\x0a}\x0d\x0a} else if (current == rear) {\x0d\x0arear = rear.previous\x0d\x0aif (rear != null) {\x0d\x0arear.next = null\x0d\x0a}\x0d\x0a} else {\x0d\x0a//中间的非两端的结点,要移除current\x0d\x0acurrent.next.previous = current.previous\x0d\x0acurrent.previous.next = current.next\x0d\x0a}\x0d\x0areturn current.data\x0d\x0a}\x0d\x0apublic boolean insertAfter(T key, T data) {//插入在key之后, key不存在return false\x0d\x0aif (isEmpty()) {\x0d\x0areturn false\x0d\x0a}\x0d\x0aLink current = head\x0d\x0awhile (!current.data.equals(key)) {\x0d\x0acurrent = current.next\x0d\x0aif (current == null) {\x0d\x0areturn false\x0d\x0a}\x0d\x0a}\x0d\x0aLink newLink = new Link(data)\x0d\x0aif (current == rear) {\x0d\x0arear = newLink\x0d\x0a} else {\x0d\x0anewLink.next = current.next\x0d\x0acurrent.next.previous = newLink\x0d\x0a}\x0d\x0acurrent.next = newLink\x0d\x0anewLink.previous = current\x0d\x0areturn true\x0d\x0a}\x0d\x0apublic void displayList4Head() {//从头开始遍历\x0d\x0aSystem.out.println("List (first-->last):")\x0d\x0aLink current = head\x0d\x0awhile (current != null) {\x0d\x0acurrent.displayLink()\x0d\x0acurrent = current.next\x0d\x0a}\x0d\x0a}\x0d\x0apublic void displayList4Rear() {//从尾开始遍历\x0d\x0aSystem.out.println("List (last-->first):")\x0d\x0aLink current = rear\x0d\x0awhile (current != null) {\x0d\x0acurrent.displayLink()\x0d\x0acurrent = current.previous\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0aclass Link {//链结点\x0d\x0aT data//数据域\x0d\x0aLink next//后继指针,结点 链域\x0d\x0aLink previous//前驱指针,结点 链域\x0d\x0aLink(T data) {\x0d\x0athis.data = data\x0d\x0a}\x0d\x0avoid displayLink() {\x0d\x0aSystem.out.println("the data is " + data.toString())\x0d\x0a}\x0d\x0a}\x0d\x0apublic static void main(String[] args) {\x0d\x0aDoublyLinkedList list = new DoublyLinkedList()\x0d\x0alist.insertLast(1)\x0d\x0alist.insertFirst(2)\x0d\x0alist.insertLast(3)\x0d\x0alist.insertFirst(4)\x0d\x0alist.insertLast(5)\x0d\x0alist.displayList4Head()\x0d\x0aInteger deleteHead = list.deleteHead()\x0d\x0aSystem.out.println("deleteHead:" + deleteHead)\x0d\x0alist.displayList4Head()\x0d\x0aInteger deleteRear = list.deleteRear()\x0d\x0aSystem.out.println("deleteRear:" + deleteRear)\x0d\x0alist.displayList4Rear()\x0d\x0aSystem.out.println("find:" + list.find(6))\x0d\x0aSystem.out.println("find:" + list.find(3))\x0d\x0aSystem.out.println("delete find:" + list.delete(6))\x0d\x0aSystem.out.println("delete find:" + list.delete(1))\x0d\x0alist.displayList4Head()\x0d\x0aSystem.out.println("----在指定key后插入----")\x0d\x0alist.insertAfter(2, 8)\x0d\x0alist.insertAfter(2, 9)\x0d\x0alist.insertAfter(9, 10)\x0d\x0alist.displayList4Head()\x0d\x0a}\x0d\x0a}实现链表的思路: 1)链表类,结点类(链表类的内部类),在main()方法创建一条链表类对象,通过方法逐步创建结点类,通过引用链接起来成为链表。2)结点类包含数据和对下个结点的引用,以及可以对数据赋值的构造函数。3)链表类的构造方法,只构造出不含数据的头结点。(外部类可以直接对内部类的私有成员进行访问,这样就可以直接修改引用)
在Java中如何实现双向链表?
给您推荐相同类型的内容:
电脑怎么开热点给手机连
方法如下:工具原料:iPhone12、iOS14.4.2、Dell游匣G15、win101、打开手机设置,在设置页面点击“个人热点”。2、打开个人热点后,在下方可以设置热点的密码。3、打开热点后,在电脑上点击无线图标。4、查找热点的名CSS字体与文本样式详解
学习导航 1、css中的长度与颜色 2、css中的文字属性 3、css中的文本属性1、文字样式属性font-family 字体属性Go语言的应用
Go语言由Google公司开发,并于2009年开源,相比JavaPythonC等语言,Go尤其擅长并发编程,性能堪比C语言,开发效率肩比Python,被誉为“21世纪的C语言”。Go语言在云计算、大数据、微服务、高并发领域应用应用非常广Go微服务--常见的微服务框架
近几年诞生了很多微服务框架,比如JAVA的Spring Cloud、DubboGolang的GoKit和GoMicro以及NodeJs的Seneca。几乎每种主流语言都有其对应的微服务框架。 Go在微服务框架中有其独特的优势,至于优势在为啥电脑插耳机没声音?
电脑插耳机没有声音的原因和解决方法如下:1、可能是耳机没有完全插入电脑音频接口,重新插入再确认是否有声音。2、可能是耳机差错音频接口(插成麦克风接口),更换接口再插入确认。3、可能是电脑没有安装音频接口驱动,使用驱动软件重新更新驱动即笔记本双显卡的好处是什么?
双显卡简单地说,就是电脑里有两块显卡共同作图形数据处理的方式,目的就是为了提高电脑性能。那么笔记本双显卡的好处是什么? 1、 如果双显卡是独立显卡+集成显卡,那么最大的好处就是省电。 2、 当处理2D网页、文档的地数据时,切换成集成显卡怎么让电脑黑屏
电脑不用时怎样设置黑屏?电脑不用时如何设置黑屏?怎么让电脑黑屏?我为大家分享了解决怎么让电脑黑屏的方法。设置电脑黑屏方法正常的进入控制面板即可,通过开始页面或者通过计算机我的电脑中的打开控制面板等都可以打开。wi电脑什么牌子的好
电脑什么牌子的好如下:1.联想 Lenovo。品牌介绍:联想集团下国内知名的电脑数码产品品牌,创始人是柳传志先生。于1985年推出第一款具有联想功能的汉卡产品联想式汉卡,联想这一品牌名称由此而来。联想主要产品有台式电脑、服务器、笔记本苹果手机连不上电脑怎么办
当苹果手机与电脑连接在一起时没有反应,这时候我们应该怎么办,下面小编就给大家出解决这个问题的注意。 方法一: 如果苹果手机跟电脑连接没有反应,首先我们应该检查一下自己连接在电脑上面的数据线,因为数据线是与PC连接一起的媒介,如果说连接在电电脑怎么分区
新买来的电脑一般都只有两个盘,一个C盘就是系统盘,另一个是D盘,也就是我们平时使用的盘。不过把所有东西都放到一个盘里显得非常的乱,我们都会把磁盘进行适当的分区,每个盘都有各自的名字,这样我们就可以很方便的对我们的文件进行管理不会显得很乱了。液晶显示器有哪几种面板,哪种最好?
液晶显示屏主要有TN和广视角面板,TN类面板生产技术成熟,良品率高,价格也相对于广视角便宜,缺点是可见视角小并且不利于色彩的还原。广视角角面板就可以分为IPS面板、MVA面板还有PVA面板,其中以IPS屏使用最广泛。它们的价格相对于TN屏都电脑拼图怎么拼图 电脑拼图如何拼图
1、首先就是打开你电脑上的画图工具。 2、然后就是打开第一张图片。 3、接着就是将画布托大。 4、然后就是点击【粘贴】下的【粘贴来源】。 5、接着就是选择粘贴来源的图片。 6、然后就是拖动粘贴的图片到空白的部分(因为刚刚什么叫电脑绣花
就是用电脑绣花机来绣花。是用来刺绣衣服上的标志;艺术花;一些人工绣花无可代替的绣花都可以从绣花机上刺绣出来,比如adidasNIKE之类的品牌都是靠刺绣在衣服上绣标志的,印花的也有,不够印花的容易在洗涤后掉油墨!而绣花就不会(这就是好处)绣那个牌子的笔记本的标志上画了条龙或者龙头?
画有龙头的品牌是微星笔记本以下是对微星笔记本的介绍微星笔记本由微星科技推出的游戏本产品,专为游戏玩家量身定做的游戏本。搭载最新顶级显卡、游戏杀手网卡、发烧级音箱和多彩背光键盘。一直以来始终秉持着‘产品卓越、品质精良、服务完美、客户满意’将vue的dom转成普通html
将vue的dom转成普通html方法。1、Vue.js的DOM转换成普通HTML的过程中,会利用Vue.js的特性来把数据和模板编译成实际的HTML。2、从而可以以最快的速度实现从JavaScript对象到DOM的转换。vue自动配置打包完电脑主板的功能主要是什么?
主板的作用:1.将不同电压的用电器连接在一起,并提供相应的电源。2.将不同功能的用电器连接在一起,使它们相互传递信息。3.接收外来数据,并给其它设备处理。4.将内部设备处理的数据集中,并传递给外界。5.平衡电脑中的数据、能源、速度、温度、电手机怎么投屏到电脑啊
如果您使用的是华为手机和华为笔记本,可以通过以下方法操作:1.手机端打开 WLAN、蓝牙和 NFC 开关。2.电脑端开启 WLAN、蓝牙,并打开华为电脑管家。3.将手机(解锁状态下) NFC 区域触碰电脑华为分享感应区域或Huawei Shjs如何判断输入的数据是整数还是小数
可以转换为整数parseInt(number)和原来的数比较。也可以转换成字符串判断。var str = number+""if(str.indexOf(".")==-1){alert(&qu怎么用python写病毒
很简单,就三行import oswhile True:os.system('start cmd')运行的几秒钟后,你电脑满是cmd!国家计算机病毒应急处理中心通过对互联网的监测发现,一种利用python语言编写的恶意木马js怎么制作饼状图?
有用SVG的方法还有用HTML5的canvas控件不过这个如果用源生方法的话比较复杂你可以用一些已经有的框架来做比如说:Dojo Charting这是一个JS库.你可以参考下http:blog.csdn.netdojotoolkit什么是电绣呢?
电绣就是指电脑绣花,通过数化等处理来准备花样,指导或激发绣花机和绣框作设计所需的各种运动的过程。其中一个关键之处就是记录针迹,其目的是为了让绣花机能识别并且执行其动作,可能用一个与水平和垂直棒相连的针,来记录那些形成花样所需要的点。而实现电脑字体大小怎么设置
设置台式电脑字体大小有很多途径,具体可以参考以下几点:1.点击显示设置:打开电脑,进入电脑主界面,在电脑桌面上,点击鼠标右键,便会弹出一个选项框,在选项框中选择下方的显示设置选项。2.缩放与布局:进入显示设置界面后,点击显示,点击缩放与布局关于canvas和css中对文字的外描边和内描边
可以看出fillText实心文字先绘制,strokeText空心文字后绘制,他们坐标一致,所以直接覆盖可实心文字,形成了像文字内部描边通过text-shadow添加文字阴影可以形成对文字的外描边 注释:Internet Explorerhtml用什么软件写代码
写html代码的软件:1、SublimeText;2、Dreamweaver;3、WebStorm;4、HBuilder;5、Notepad;6、VSCode;7、Vim;8、AptanaStudio;9、IntelliJIDEA。本教程操如何查看自己电脑的操作系统
查看电脑操作系统的具体操作方法如下:方法一:1.在电脑桌面上找到“我的电脑”的图标,并右击选择 属性 ,进入属性面板。2.这时候就可以看见自己电脑操作系统的位数啦!如图所示,电脑操作系统的位数为64位。方法二:1.在键盘上按 Win+如何在苹果笔记本电脑连接打印机?
苹果笔记本和普通打印机连接步骤如下:需要准备的工具:笔记本电脑,系统偏好设置。1、打开苹果笔记本电脑,找到“系统偏号设置”,鼠标单击打开。2、单击选中 “打印机与扫描仪”。3、鼠标选中左下角处的“加号”,添加打印机。4、选中通过IP地址添加电脑休眠状态怎么关闭
取消电脑休眠状态的方法如下:工具/原料:方正FD1520A、windows10、控制面板1.0步骤:1、打开“控制面板”,选择“系统和安全”。2、在“系统和安全”界面下选择“电源选项”。3、选择左侧的“更改计算机睡眠时间”。4、在“使Html页面代码中 为什么要使用<form>表单标签,使用该标签有什么意义?
html<form>表单标签使用在一个网页中数据提交标签。 例如,可以在留言板,评论等中填写数据,表单提交标签是提交处理所必需的。<form>表单标签包含输入框input,单选,多选,sel如何用C语言得到精确到微秒
timeval这个struct当中可以精确到微秒。LINUX中示例:#include <stdio.h> for printf()#include <systime.h&r语言ctree中criterion什么含义
AIC 和BIC 都是用来衡量回归模型的方法AIC的值被能被最小化的模型是最理想的模型。AIC=2k-2ln(L)其中k是参数数量,因为增加参数数量基本上都会提高拟合度,但AIC旨在选出最有效的模型,无谓的增加参数数量会增加AIC的值。后面