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

 

 

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

http://www.ayp2545.cn/
http://www.pgn4393.cn/
http://www.npd9270.cn/
http://www.sfi6002.cn/
http://www.nne5492.cn/
http://www.yai2320.cn/
http://www.ics4171.cn/
http://www.sfv9051.cn/
http://www.ccg1407.cn/
http://www.hjn1455.cn/
http://www.ygf6271.cn/
http://www.vfm1218.cn/
http://www.aaa4131.cn/
http://www.guc5469.cn/
http://www.dcj3647.cn/
http://www.utm9669.cn/
http://www.ahg7671.cn/
http://www.nxn1651.cn/
http://www.rrq5757.cn/
http://www.pbr1256.cn/
http://www.oai3459.cn/
http://www.vaj6107.cn/
http://www.xfc0942.cn/
http://www.evc2128.cn/
http://www.bwu7749.cn/
http://www.rmf4655.cn/
http://www.pyq8206.cn/
http://www.sdk5229.cn/
http://www.sez8143.cn/
http://www.tfn8353.cn/
http://www.uem3051.cn/
http://www.tza5452.cn/
http://www.epp9269.cn/
http://www.tsr7510.cn/
http://www.xhv3734.cn/
http://www.vrc9998.cn/
http://www.dsf5404.cn/
http://www.xjm6385.cn/
http://www.iaz1229.cn/
http://www.kcv6320.cn/
http://www.usl0022.cn/
http://www.abo8793.cn/
http://www.qeb9677.cn/
http://www.atx6995.cn/
http://www.buv6436.cn/
http://www.lll4952.cn/
http://www.cjx5965.cn/
http://www.otg2660.cn/
http://www.bmn9515.cn/
http://www.ewf1466.cn/
http://www.cbc3788.cn/
http://www.iqp5694.cn/
http://www.drr8954.cn/
http://www.blk2293.cn/
http://www.tjx3222.cn/
http://www.ksy2010.cn/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值