在Java中如何实现双向链表?2023-02-23 07:07:02Python011双向链表:就是有双向指针,即双向的链域。\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}用node。javaListNode链表就是用Java自定义实现的链表结构。链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点组成,结点可以在运行时动态生成。结点链表双向指针遍历# 上一篇:r,w,a+,r+在C语言中各自表示什么意思?# 下一篇:郝斌老师的c语言讲得怎么样?给您推荐相同类型的内容: 学习Ruby需要什么资料 Programming Ruby(2nd Edition) 这似乎已经不是怪事:关于一种编程语言的经典教材,作者不是这门语言的创造者。就像Stan Lippman之于C++、Joshua Bloch之于Java、Martin Fowler之 怎样学习GO语言? golang学习比较简单,不过任何一门语言都不是孤立存在的,在这里简要说明一下golang开发的学习路线1.golang基础,包括go语言安装,go语言语法,流程控制语句,函数,方法,面向对象概念,网络编程,并发编程等2.golang开发框 在C语言中Strlen是什么意思? strlen是求字符串的长度,但不包括字符串的null结束符。strlen为C语言库函数,包含于string.h中,作用为计算一个字符串(字符数组)中元素的个数,即从数组头部计数,直到遇到字符串结束符为止,计数结果不包括。需要注 python集成开发环境哪个好 集成开发环境是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。所有具备这一特性的软件或者软件套都可以叫集成开发环境。10个好 ubuntu 怎么运行ruby代码 第一步——用RVM安装Ruby 在开始之前,我们需要在VPS上运行一次快速更新,确保所有的包都是最新的: sudo apt-get update 更新完毕之后,我们可以开始安装RVM(Ruby Version Manager). 这是个让我 R语言中的正则表达式 p匹配的是它自己,这就是原义表达式。 本来只想匹配 . ,但是在这里这个点代表了所有字符,于是返回了1 2 3。这个. 就是一个转义表达式。 分别提取含7-9的数字或3-4的数字的字符串 ^XX就是以XX开头的意思 当^放在 郝斌老师的c语言讲得怎么样? 郝斌老师讲的c语言基本都是基础知识,非常适合初学者,对于初学者来说可能是非常好的入门教程,郝斌老师讲课诙谐幽默,而且也都是从原理上给学生讲课,这就让从没学过计算机基础的人也可以掌握c语言,理解c语言的运行机制,同时郝斌老师的课程还培养出非常 《Python参考手册(第4版)》pdf下载在线阅读,求百度网盘云资源 《Python参考手册(第4版)》(David M.Beazley)电子书网盘下载免费在线阅读资源链接:链接: https:pan.baidu.coms1CchAfGsDDo7PIUykouq9Uw提取码: kybr 书名: 《R语言实战》pdf下载在线阅读全文,求百度网盘云资源 《R语言实战》百度网盘pdf最新全集下载:链接: https:pan.baidu.coms1l4j98ELscMCHhfUd9Qxn2w?pwd=2zte 提取码: 2zte简介:本书注重实用性,是一本全面而细致的R指南,高度概括 R语言的一些矩阵运算 摘自: https:www.cnblogs.comyupeter007p5325575.html矩阵的存储默认是按列进行存储的 matrix (data = NA, nrow = 1, ncol = 1, byrow JAVA 数值传递 常用变量传递: 你是指常量传递还是变量传递? 首先,JAVA也是按值传递的,看其值类型,如果是基本类型的,如 int,float,double等基本类型,传递的是值;如果类型是引用类型,那么传递的是值的引用(相当于C的指针),;另外常量是在 R语言中如何使用最小二乘法 static void(int[]group){int tempint pos=0for(int i=0i<group.Length-1i++){pos=ifor(intj=i+1j<group.Lengthj++) R语言|生成随机数 首先,如果想要别人复现出跟你一样的结果,要先设置随机种子 Set the seed of R‘s random number generator, which is useful for creating simulations or 各偶像中文网大家来说一下吧!在此谢谢大家! 佘诗曼www.shehsheh.com 王艳:http:www.wang-yan.com 周笔畅http:www.zhou-bichang.cn 张含韵http:www.zhycn.com 刘亦菲http:www.ly java怎么调用solr查询接口 solr官方网站 http:lucene.apache.orgsolr下面是一个例子:import org.apache.solr.client.solrj.SolrServer import org.apache.solr.cli python 不定积分 步骤 python求解不定积分首先导入sympy库中的所有类和函数。from sympy import *接下来我们需要定义,本次需要使用到的符号变量x,其定义如下:x = symbols('x')最后我们来计算积分,定积分和 java内部有没有定义好的栈的类? 有。数据结构中的栈,在解决很多问题都有用处,比如括号匹配,迷宫求解,表达式求值等等,java中有封装好的类,可以直接调用。使用链表来实现栈比用数组更加方便,也易于节省空间,因为栈只能在栈顶进行操作,不需要进行随机访问栈元素。首先实现栈接口 python列表的基本操作 python列表的基本操作如下:01 '''02 列表:有非常重要的地位。(list)03 [项,项...]04 '''05 list1=['zhang san C语言数组当参数传递 在学习C语言的过程中遇到数组作为参数传递的问题 一维数组: 这样我们可以很顺利的在test去遍历这个数组a,当然我们还可能传递指针: 一般来数参数的传递是值传递,也就是说实参传给形参,形参发生改变时实参并不会改变,(单向)但是数 C语言编程题,找鞍点 #include<stdio.h>int main(){int a[4][4]={{2,3,9,5},{6,7,8,3},{0,5,7,5},{2,1,8,3}}int i,j,k,i0,j0,find=0 为什么苹果可以用两种编程语言开发应用?而安卓只能用JAVA。不能用其他呢?Go语言不支持安卓? 苹果公司允许开发人员使用 Objective-C 和 Swift 两种编程语言开发 iOS 应用,因为这两种语言已经紧密地与苹果的开发环境和工具集整合在一起。安卓操作系统原生支持 Java 语言,因此它是安卓应用开发的首选语言。但是,安卓 谷歌为什么要发明GO编程语言 Go语言是谷歌2009发布的编程语言,这个语言发明的目的,就是为了在运行速度接近CC++语言的基础上(注意是接近),降低开发者的门槛,减少开发难度。Go语言,在功能上没有超过CC++,适用者为没有CC++经验的开发者,开发出接近C效率 python字符串前缀 u和r的区别 以r或R开头的python中的字符串表示(非转义的)原始字符串python里面的字符,如果开头处有个r,比如:(r’^timeplusd{1,2}$’, hours_ahead)说明字符串r"XXX"中的X R语言的一些矩阵运算 摘自: https:www.cnblogs.comyupeter007p5325575.html矩阵的存储默认是按列进行存储的 matrix (data = NA, nrow = 1, ncol = 1, byrow Python 适合大数据量的处理吗 python可以处理大数据,python处理大数据不一定是最优的选择。适合大数据处理。而不是大数据量处理。 如果大数据量处理,需要采用并用结构,比如在hadoop上使用python,或者是自己做的分布式处理框架。python的优势不在于运 新加坡rubylandcomplex属于新加坡北部嘛 属于。北部区域,包括义顺、兀兰、林厝港、三巴旺、中央集水区等地,紧邻马来西亚。北部的中央集水区是新加坡最大的自然保护区,被称为新加坡的“绿肺”,同时北部有著名的三所动物园——新加坡动物园、夜间动物园和河川生态园。东北区区域,是新加坡新兴住宅 《R语言实战》pdf下载在线阅读全文,求百度网盘云资源 《R语言实战》百度网盘pdf最新全集下载:链接: https:pan.baidu.coms1l4j98ELscMCHhfUd9Qxn2w?pwd=2zte 提取码: 2zte简介:本书注重实用性,是一本全面而细致的R指南,高度概括 python的推荐书籍有哪些 零基础如何学好python,作为一个学了python两三年的过来人,我当初也是从0开始一路摸索过来的,这里给想学python的小白们分享一点我的学习心得。1.《笨方法学Python》、《流畅的python》、《EffectivePython C语言高级教程 学习编程,可不仅仅是语言的事情。基本上所有的新手都不知道自己需要什么。我的建议是,你找一些你将来想开发的项目的源码来看,一边看,一边查资料,一边学习,这样的效率是非常高的。而且,基本所有的骨灰程序员都是这么过来的。另外说一下,如果你想成为一 C语言多文件编程 多个c文件的作用在于将不同功能的代码分开来实现,这样便于代码重用、代码编译和代码管理。一个程序中,只能有一个main函数,这是整个程序的起点和入口。如果其他人也实现了该函数,则必须要重新命名,然后在唯一的main函数中统一调用。多个c文件的