Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 331|回复: 0

[默认分类] JAVA实现双向链表的增删功能

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-3-27 09:26:25 | 显示全部楼层 |阅读模式
    java实现双向链表的增删功能,完整代码

    1. package linked;
    2. class LinkedTable{
    3.    
    4. }
    5. public class LinkedTableTest {
    6.    
    7.     //构造单链表
    8.     static Node node1 = new Node("name1");
    9.     static Node node2 = new Node("name2");
    10.     static Node node3 = new Node("name3");
    11.     static Node node4 = new Node("name4");
    12.     static Node node5 = new Node("name5");
    13.    
    14.    
    15.     public static void main(String[] args)
    16.     {
    17.         //设置指针
    18.         setPoint();
    19.         
    20.         //循环遍历
    21.         System.out.println("*******初始链表*******");
    22.         out(node1,node5);
    23.         System.out.println();
    24.         
    25.         //插入节点在node2的后面
    26.         addNode(node2,node3);
    27.         
    28.         // 循环遍历
    29.         System.out.println("*******插入node2.5*******");
    30.         out(node1, node5);
    31.         System.out.println();
    32.                
    33.         //删除节点
    34.         node2.setNextNode(node3);
    35.         node3.setNextNodeF(node2);
    36.         
    37.         // 循环遍历
    38.         System.out.println("*******删除node2.5*******");
    39.         out(node1, node5);
    40.         System.out.println();
    41.         
    42.     }
    43.    
    44.     //设置指针
    45.     public static void setPoint()
    46.     {
    47.         //设置正向指针
    48.         node1.setNextNode(node2);
    49.         node2.setNextNode(node3);
    50.         node3.setNextNode(node4);
    51.         node4.setNextNode(node5);
    52.         //设置反向指针
    53.         node5.setNextNodeF(node4);
    54.         node4.setNextNodeF(node3);
    55.         node3.setNextNodeF(node2);
    56.         node2.setNextNodeF(node1);
    57.     }
    58.    
    59.     //循环遍历单链表
    60.     public static void outLinked(Node startNode){
    61.         Node node= new Node();
    62.         node.setNextNode(startNode);
    63.         do
    64.         {
    65.             node=node.getNextNode();
    66.             System.out.print(node.getName()+"----");   
    67.         }while(node.getNextNode()!=null);
    68.     }
    69.    
    70.     //反向循环遍历单链表
    71.     public static void outLinkedF(Node endNode){
    72.         Node node= new Node();
    73.         node.setNextNodeF(endNode);
    74.         do
    75.         {
    76.             node=node.getNextNodeF();
    77.             System.out.print(node.getName()+"----");   
    78.         }while(node.getNextNodeF()!=null);
    79.     }
    80.    
    81.     //循环遍历
    82.     public static void out(Node startNode,Node endNode)
    83.     {
    84.         
    85.         outLinked(startNode);
    86.         System.out.println();
    87.         outLinkedF(endNode);
    88.         
    89.     }
    90.    
    91.     //插入节点
    92.     public static void addNode(Node preNode,Node nextNode)
    93.     {
    94.         Node node_add = new Node("name2.5");
    95.         node_add.setNextNode(preNode.getNextNode());
    96.         preNode.setNextNode(node_add);
    97.         
    98.         node_add.setNextNodeF(nextNode.getNextNodeF());
    99.         nextNode.setNextNodeF(node_add);
    100.     }
    101.    
    102.    
    103.    
    104. }
    105. class Node {
    106.     private String name;
    107.     private Node nextNode;
    108.     private Node nextNodeF;
    109.     public void setName(String name)
    110.     {
    111.         this.name=name;
    112.     }
    113.     public void setNextNode(Node nextNode)
    114.     {
    115.         this.nextNode=nextNode;
    116.     }
    117.     public void setNextNodeF(Node nextNodeF)
    118.     {
    119.         this.nextNodeF=nextNodeF;
    120.     }
    121.     public String getName()
    122.     {
    123.         return this.name;
    124.     }
    125.     public Node getNextNode()
    126.     {
    127.         return this.nextNode;
    128.     }
    129.     public Node getNextNodeF()
    130.     {
    131.         return this.nextNodeF;
    132.     }
    133.     public Node(String name)
    134.     {
    135.         this.name=name;
    136.         this.nextNode=null;
    137.     }
    138.     public Node( )
    139.     {
    140.         
    141.     }
    142.    
    143. }
    复制代码


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

    参数说明:
      name:用于存储node自身的信息
      nextNode:用于存储正向指针
      nextNodeF:用于存储反向指针

    1. class Node {
    2.     private String name;
    3.     private Node nextNode;
    4.     private Node nextNodeF;
    5.     public void setName(String name)
    6.     {
    7.         this.name=name;
    8.     }
    9.     public void setNextNode(Node nextNode)
    10.     {
    11.         this.nextNode=nextNode;
    12.     }
    13.     public void setNextNodeF(Node nextNodeF)
    14.     {
    15.         this.nextNodeF=nextNodeF;
    16.     }
    17.     public String getName()
    18.     {
    19.         return this.name;
    20.     }
    21.     public Node getNextNode()
    22.     {
    23.         return this.nextNode;
    24.     }
    25.     public Node getNextNodeF()
    26.     {
    27.         return this.nextNodeF;
    28.     }
    29.     public Node(String name)
    30.     {
    31.         this.name=name;
    32.         this.nextNode=null;
    33.     }
    34.     public Node( )
    35.     {
    36.         
    37.     }
    38.    
    39. }
    复制代码


    2,创建节点,设置指针连接节点
    正向指针:指向下一个节点
    反向节点:指向上一个节点

    1. //构造单链表
    2.     static Node node1 = new Node("name1");
    3.     static Node node2 = new Node("name2");
    4.     static Node node3 = new Node("name3");
    5.     static Node node4 = new Node("name4");
    6.     static Node node5 = new Node("name5");
    7.    
    复制代码



    1. public static void setPoint()
    2.     {
    3.         //设置正向指针
    4.         node1.setNextNode(node2);
    5.         node2.setNextNode(node3);
    6.         node3.setNextNode(node4);
    7.         node4.setNextNode(node5);
    8.         //设置反向指针
    9.         node5.setNextNodeF(node4);
    10.         node4.setNextNodeF(node3);
    11.         node3.setNextNodeF(node2);
    12.         node2.setNextNodeF(node1);
    13.     }
    复制代码


    3,将链表循环遍历输出

    1. public static void outLinked(Node startNode){
    2.         Node node= new Node();
    3.         node.setNextNode(startNode);
    4.         do
    5.         {
    6.             node=node.getNextNode();
    7.             System.out.print(node.getName()+"----");   
    8.         }while(node.getNextNode()!=null);
    9.     }
    复制代码



    1.     public static void outLinkedF(Node endNode){
    2.         Node node= new Node();
    3.         node.setNextNodeF(endNode);
    4.         do
    5.         {
    6.             node=node.getNextNodeF();
    7.             System.out.print(node.getName()+"----");   
    8.         }while(node.getNextNodeF()!=null);
    9.     }
    复制代码


    4,添加节点

    1.     public static void addNode(Node preNode,Node nextNode)
    2.     {
    3.         Node node_add = new Node("name2.5");
    4.         node_add.setNextNode(preNode.getNextNode());
    5.         preNode.setNextNode(node_add);
    6.         
    7.         node_add.setNextNodeF(nextNode.getNextNodeF());
    8.         nextNode.setNextNodeF(node_add);
    9.     }
    复制代码


    5,删除节点

    1. node2.setNextNode(node3);
    2. node3.setNextNodeF(node2);
    复制代码


     
     
    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( ){}}
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-21 07:23 , Processed in 0.321970 second(s), 35 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表