欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-13 11:28:52
java实现双向链表的增删功能,完整代码 package linked; class linkedtable{ } public class linke...

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节点,需要两个指针,一个正向存储下一个元素的位置,一个反向存储下一个元素的位置

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

参数说明:

  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);

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