JAVA实现双向链表的增删功能的方法

 更新时间:2018年03月26日 10:10:58   作者:song.yan  
本篇文章主要介绍了JAVA实现双向链表的增删功能的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

JAVA实现双向链表的增删功能,完整代码

package linked;
class LinkedTable{  
}
public class LinkedTableTest {
   //构造单链表
  static Node node1 = new Node("name1");
  static Node node2 = new Node("name2");
  static Node node3 = new Node("name3");
  static Node node4 = new Node("name4");
  static Node node5 = new Node("name5");
  public static void main(String[] args)
  {
    //设置指针
    setPoint();
    
    //循环遍历
    System.out.println("*******初始链表*******");
    out(node1,node5);
    System.out.println();
    
    //插入节点在node2的后面
    addNode(node2,node3);
    
    // 循环遍历
    System.out.println("*******插入node2.5*******");
    out(node1, node5);
    System.out.println();
        
    //删除节点
    node2.setNextNode(node3);
    node3.setNextNodeF(node2);
    
    // 循环遍历
    System.out.println("*******删除node2.5*******");
    out(node1, node5);
    System.out.println();
    
  }
  
  //设置指针
  public static void setPoint()
  {
    //设置正向指针
    node1.setNextNode(node2);
    node2.setNextNode(node3);
    node3.setNextNode(node4);
    node4.setNextNode(node5);
    //设置反向指针
    node5.setNextNodeF(node4);
    node4.setNextNodeF(node3);
    node3.setNextNodeF(node2);
    node2.setNextNodeF(node1);
  }
  
  //循环遍历单链表
  public static void outLinked(Node startNode){
    Node node= new Node();
    node.setNextNode(startNode);
    do
    {
      node=node.getNextNode();
      System.out.print(node.getName()+"----");  
    }while(node.getNextNode()!=null);
  }
  
  //反向循环遍历单链表
  public static void outLinkedF(Node endNode){
    Node node= new Node();
    node.setNextNodeF(endNode);
    do
    {
      node=node.getNextNodeF();
      System.out.print(node.getName()+"----");  
    }while(node.getNextNodeF()!=null);
  }
  
  //循环遍历
  public static void out(Node startNode,Node endNode)
  {
    outLinked(startNode);
    System.out.println();
    outLinkedF(endNode);    
  }
  
  //插入节点
  public static void addNode(Node preNode,Node nextNode)
  {
    Node node_add = new Node("name2.5");
    node_add.setNextNode(preNode.getNextNode());
    preNode.setNextNode(node_add);    
    node_add.setNextNodeF(nextNode.getNextNodeF());
    nextNode.setNextNodeF(node_add);
  }  
}

class Node {
  private String name;
  private Node nextNode;
  private Node nextNodeF;
  public void setName(String name)
  {
    this.name=name;
  }
  public void setNextNode(Node nextNode)
  {
    this.nextNode=nextNode;
  }
  public void setNextNodeF(Node nextNodeF)
  {
    this.nextNodeF=nextNodeF;
  }
  public String getName()
  {
    return this.name;
  }
  public Node getNextNode()
  {
    return this.nextNode;
  }
  public Node getNextNodeF()
  {
    return this.nextNodeF;
  }
  public Node(String name)
  {
    this.name=name;
    this.nextNode=null;
  }
  public Node( )
  {    
  }  
}

1,构造node节点,需要两个指针,一个正向存储下一个元素的位置,一个反向存储下一个元素的位置

参数说明:

  name:用于存储node自身的信息

  nextNode:用于存储正向指针

  nextNodeF:用于存储反向指针

class Node {
  private String name;
  private Node nextNode;
  private Node nextNodeF;
  public void setName(String name)
  {
    this.name=name;
  }
  public void setNextNode(Node nextNode)
  {
    this.nextNode=nextNode;
  }
  public void setNextNodeF(Node nextNodeF)
  {
    this.nextNodeF=nextNodeF;
  }
  public String getName()
  {
    return this.name;
  }
  public Node getNextNode()
  {
    return this.nextNode;
  }
  public Node getNextNodeF()
  {
    return this.nextNodeF;
  }
  public Node(String name)
  {
    this.name=name;
    this.nextNode=null;
  }
  public Node( )
  {    
  }  
}

2,创建节点,设置指针连接节点

正向指针:指向下一个节点

反向节点:指向上一个节点

//构造单链表
  static Node node1 = new Node("name1");
  static Node node2 = new Node("name2");
  static Node node3 = new Node("name3");
  static Node node4 = new Node("name4");
  static Node node5 = new Node("name5");
public static void setPoint()
  {
    //设置正向指针
    node1.setNextNode(node2);
    node2.setNextNode(node3);
    node3.setNextNode(node4);
    node4.setNextNode(node5);
    //设置反向指针
    node5.setNextNodeF(node4);
    node4.setNextNodeF(node3);
    node3.setNextNodeF(node2);
    node2.setNextNodeF(node1);
  }

3,将链表循环遍历输出

public static void outLinked(Node startNode){
    Node node= new Node();
    node.setNextNode(startNode);
    do
    {
      node=node.getNextNode();
      System.out.print(node.getName()+"----");  
    }while(node.getNextNode()!=null);
  }

  public static void outLinkedF(Node endNode){
    Node node= new Node();
    node.setNextNodeF(endNode);
    do
    {
      node=node.getNextNodeF();
      System.out.print(node.getName()+"----");  
    }while(node.getNextNodeF()!=null);
  }

4,添加节点

  public static void addNode(Node preNode,Node nextNode)
  {
    Node node_add = new Node("name2.5");
    node_add.setNextNode(preNode.getNextNode());
    preNode.setNextNode(node_add);
    
    node_add.setNextNodeF(nextNode.getNextNodeF());
    nextNode.setNextNodeF(node_add);
  }

5,删除节点

node2.setNextNode(node3);
node3.setNextNodeF(node2);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java数据结构排序算法之树形选择排序详解

    java数据结构排序算法之树形选择排序详解

    这篇文章主要介绍了java数据结构排序算法之树形选择排序,结合具体实例形式分析了java树形选择排序的原理、实现技巧与相关注意事项,需要的朋友可以参考下
    2017-05-05
  • 浅析 Java多线程

    浅析 Java多线程

    这篇文章主要介绍了Java多线程的相关资料,帮助大家更好的理解和学习Java线程相关知识,感兴趣的朋友可以了解下
    2020-09-09
  • 深入理解可视化JVM 故障处理工具

    深入理解可视化JVM 故障处理工具

    这篇文章主要介绍了深入理解可视化JVM 故障处理工具,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Java总结篇系列:Java泛型详解

    Java总结篇系列:Java泛型详解

    下面小编就为大家带来一篇Java总结篇系列:Java泛型详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • 完整的logback配置示例ELK整合包含生成json日志

    完整的logback配置示例ELK整合包含生成json日志

    这篇文章主要为大家介绍了完整的logback配置示例ELK整合包含生成json日志,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Java注解Annotaton详解

    Java注解Annotaton详解

    Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制,文中给大家介绍了三种基本的Annotaton,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-05-05
  • SWT JFace Bookmark 制作

    SWT JFace Bookmark 制作

    SWT JFace Bookmark 制作
    2009-06-06
  • Mybatis-Plus根据时间段去查询数据的实现示例

    Mybatis-Plus根据时间段去查询数据的实现示例

    这篇文章主要介绍了Mybatis-Plus根据时间段去查询数据的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Java8接口之默认方法与静态方法详解

    Java8接口之默认方法与静态方法详解

    java8中为接口新增了一项功能,定义一个或者更多个静态方法,类似于类中的静态方法,接口定义的静态方法可以独立于任何对象调用,下面这篇文章主要给大家介绍了关于Java8接口之默认方法与静态方法的相关资料,需要的朋友可以参考下
    2022-03-03
  • 基于SpringBoot生成二维码的几种实现方式

    基于SpringBoot生成二维码的几种实现方式

    本文将基于Spring Boot介绍两种生成二维码的实现方式,一种是基于Google开发工具包,另一种是基于Hutool来实现,具有一定的参考价值,感兴趣的可以了解一下
    2022-03-03

最新评论