首页 > 编程语言 >java实现双向链表

java实现双向链表

时间:2022-09-03 13:44:35浏览次数:73  
标签:head java DoubleNode 链表 DL1 双向 date pMove public

package 数据结构.链表.双链表;

public class DoubleNode {
private DoubleNode precursor;
private int date;
private DoubleNode next;

public DoubleNode(int date) {
this.date = date;
}

public DoubleNode(DoubleNode precursor, int date, DoubleNode next) {
this.precursor = precursor;
this.date = date;
this.next = next;
}

public DoubleNode getPrecursor() {
return precursor;
}

public int getDate() {
return date;
}

public DoubleNode getNext() {
return next;
}

public void setPrecursor(DoubleNode precursor) {
this.precursor = precursor;
}

public void setDate(int date) {
this.date = date;
}

public void setNext(DoubleNode next) {
this.next = next;
}

}

----------------
package 数据结构.链表.双链表;

/**
* Author : PingLu
* TimeBegin : 2022/03/06
* 双链表 实现增删改操作 CURD
* DoneTime 2022/03/07
*/
public class DoubleLink {
private DoubleNode head;
int size = 0;

public DoubleLink(){
//默认构造一个带有头系结点的双链表
head = new DoubleNode(null,0,null);
}

public DoubleNode getHead() {
return head;
}

public void setHead(DoubleNode head) {
this.head = head;
}

public int getSize() {
return size;
}

//判断链表是否为空
public boolean LinkIsEmpty(){
return head.getNext() == null;
}

//遍历输出链表
public void printDoubleLink(){
DoubleNode pMove = head;
System.out.println("当前链表为:"+head.getDate()+"\t大小为:"+this.size);
while (pMove.getNext() != null){
System.out.print(pMove.getNext().getDate()+"<-->");
pMove = pMove.getNext();
}
System.out.println();
}

//增加结点 效率高
public void addNode(DoubleNode node){
//如果链表中只有头节点结点直接加到头结点之后,否认需要找到链表的最后一个元素加到最后一个元素的后面
if(head.getNext() == null){
head.setNext(node);
node.setPrecursor(head);
node.setNext(null);
size ++;
return;
}
DoubleNode pMove = head;
while (pMove.getNext() != null){
pMove = pMove.getNext();
}
pMove.setNext(node);
node.setPrecursor(pMove);
node.setNext(null);
size ++;
}

//删除结点 效率高
public void delNode(int date){
if(LinkIsEmpty()){
System.out.println("Link is Empty!");
return;
}
if(!findNode(date)){
return;
}
DoubleNode tempNode = head;
while(tempNode.getDate() != date){
tempNode = tempNode.getNext();
}
//删除操作
DoubleNode f = tempNode.getPrecursor();
DoubleNode t = tempNode.getNext();
f.setNext(t);
t.setPrecursor(f);
size --;
System.out.println("Delete Node"+date+"Successful!");
}

//查找结点
// public void findNode(int date){
// if(LinkIsEmpty()){
// System.out.println("Link is Empty!");
// return;
// }
// DoubleNode pMove = head;
// while(pMove.getNext() != null){
// if(pMove.getDate() == date){
// System.out.println(pMove.getDate()+"Find!!!");
// return;
// }
// pMove = pMove.getNext();
// }
// System.out.println("Not Find This Node!");
// }
//查找结点
public boolean findNode(int date){
DoubleNode tmpNode = head;
if(LinkIsEmpty()){
System.out.println("Double Link Is Empty!");
return false;
}
while(tmpNode.getDate() != date){
tmpNode = tmpNode.getNext();
if(tmpNode.getNext() == null){
System.out.println("No This DoubleNode!");
return false;
}
}
System.out.println(tmpNode.getDate());
return true;
}

//修改结点 修改结点前需要判断结点是否存在
public void modifyNode(int date, int updateDate){
if(LinkIsEmpty()){
System.out.println("Link is Empty!");
return;
}
if(!findNode(date)){
return;
}
DoubleNode tempNode = head;
while(tempNode.getDate() != date){
tempNode = tempNode.getNext();
}
//修改操作
tempNode.setDate(updateDate);
System.out.println("MetaDate:"+date+"\tUpdate:"+updateDate+"Successful!");
}
}
------
package 数据结构.链表.双链表;

public class DoubleLinkTest {
public static void main(String[] args) {
DoubleNode node1 = new DoubleNode(2);
DoubleNode node2 = new DoubleNode(34);
DoubleNode node3 = new DoubleNode(4);

DoubleLink DL1 = new DoubleLink();
DL1.printDoubleLink();

System.out.println(DL1.LinkIsEmpty());
DL1.addNode(node1);
DL1.printDoubleLink();


DL1.addNode(node3);
DL1.printDoubleLink();

DL1.addNode(node2);
DL1.printDoubleLink();


DoubleNode node4 = new DoubleNode(41);
DL1.addNode(node4);

DL1.addNode(new DoubleNode(343));

DL1.printDoubleLink();
System.out.println(DL1.findNode(41));

System.out.println("删除结点操作");
DL1.delNode(41);

DL1.printDoubleLink();

DL1.modifyNode(4,888);
DL1.printDoubleLink();
}
}

-------

 

标签:head,java,DoubleNode,链表,DL1,双向,date,pMove,public
From: https://www.cnblogs.com/pinglu/p/16652463.html

相关文章

  • java.lang.UnsupportedOperationException解决方法
    开始的代码:item.setAnswerpics(Arrays.asList(pointscheckentryList.get(i).getProblems_pics().split(","))) 正确的代码:List<String>picsList=Arrays.asList(......
  • java复习随笔 (二)
    注明:随笔只是作者复习所用,没有实际参考价值面向对象向上转型向上转型即父类引用子类实例,例如:Fatherfather=newSon();特点:丢失子类特有方法向下转型向下转型......
  • HTML、CSS 和 JavaScript 中的所有唯一字符挑战
    HTML、CSS和JavaScript中的所有唯一字符挑战HTML:<divclass="wrapper"><h1>所有独特的字符</h1><br><p>来自<ahref="https://buttondown.email/cassidoo/ar......
  • 前端面试题 JavaScript 基础 —— 2022-09-03
    每日3题13以下代码执行后,控制台中的输出内容为?Object.prototype.a=1;Function.prototype.b=2;functionF(){}varf=newF();console.log(F.a);console.lo......
  • 第一次java测试
    二、数据结构要求:(5分) 1、定义公寓类,类名:RoomInformation,其中包括五个私有变量(roomno,stunno1,stunno2,stunno3,stunno4,hygienescore)。各成员的含义如下:变量roomno为字......
  • java一对一面试指导
    Java一对一面试指导大纲第一章:面试“潜规则” "潜规则"1:面试不是点对点回答问题,而是告诉面试官你会的技术面试的本质不是考试,不是点对点回答问题;而是自己出题,自己......
  • java mysql截取所需数据
    mysql截取数据:例:截取门铺名称,门铺名称长度不确定{"进店日期":"2022-09-01","电话":"1********25","姓名":"张三","单号":"90817","门铺":"吴滨路店","消费金额":"......
  • java mysql删除表中多余的重复记录(多个字段),只留有id最小的记录
    mysql删除表中多余的重复记录(多个字段),只留有id最小的记录DELETEFROM表1fWHERE(f.字段1,f.字段2)IN(SELECT字段1,字段2FROM表1GROUPBY字段1,字段2HAVING......
  • 九月二号——API、java String类的常用方法
    API应用软件编程接口。是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组里程能力,而无需访问源代码,或理解内部工作机制的细节。String类的......
  • JavaScript const
    JavaScriptconst块作用域varx=10;//此处x为10{constx=6;//此处x为6}//此处x为10在声明时赋值constPI;PI=5134525352;//不正确co......