循环双向链表的实现

循环双向链表的实现

代码

package com.wuxudong.doublenode;

//循环双向链表的实现
public class DoubleNode {

    //双向链表存储三个数据,一个是当前节点的值,一个是上一个节点的引用,一个是下一个节点的引用

    private int data;

    private DoubleNode pre=this;

    private DoubleNode next=this;

    public DoubleNode(int data){
        this.data=data;

    }

    //获取数据
    public int getData(){
        return this.data;
    }

    //获取上一个节点
    public DoubleNode pre(){
        return this.pre;
    }

    //获取下一个节点
    public DoubleNode next(){
        return this.next;
    }

    //添加节点的方法
    public void addNode(DoubleNode node){
        //获取当前节点
        DoubleNode currentNode=this;

        //保存当前节点的下一个节点
        DoubleNode nextNode=currentNode.next;

        //当前节点的下一个节点应该是新节点
        currentNode.next=node;

        //当前节点的下一个节点的上一个节点应该是新节点
        nextNode.pre=node;

        //新节点的上一个节点应该是当前节点
        node.pre=currentNode;

        //新节点的下一个节点应该是当前节点的下一个节点
        node.next=nextNode;


    }

    //删除当前节点的方法
    public void deleteNode(){
        if(this==null){
            throw new RuntimeException("当前节点为空");
        }
        //获取当前节点
        DoubleNode node=this;
        //获取当前节点的上一个节点
        DoubleNode preNode=node.pre;

        //获取当前节点的下一个节点
        DoubleNode nextNode=node.next;

        //上一个节点的下一个应该是下一个节点
        preNode.next=nextNode;

        //下一个节点的上一个节点应该是上一个节点
        nextNode.pre=preNode;

    }



}

测试代码

package com.wuxudong.doublenode;

public class DoubleNodeTest {

    public static void main(String[] args) {
        DoubleNode doubleNode1=new DoubleNode(1);
        DoubleNode doubleNode2=new DoubleNode(2);
        DoubleNode doubleNode3=new DoubleNode(3);

        doubleNode1.addNode(doubleNode2);
        doubleNode2.addNode(doubleNode3);

       /* System.out.println(doubleNode1.next().getData());//2
        System.out.println(doubleNode1.getData());//1
        System.out.println(doubleNode1.pre().getData());//3

        System.out.println(doubleNode2.next().getData());//3
        System.out.println(doubleNode2.getData());//2
        System.out.println(doubleNode2.pre().getData());//1

        System.out.println(doubleNode3.next().getData());//1
        System.out.println(doubleNode3.getData());//3
        System.out.println(doubleNode3.pre().getData());//2*/


        //删除节点3
        doubleNode3.deleteNode();
        System.out.println(doubleNode1.next().getData());//2
        System.out.println(doubleNode1.getData());//1
        System.out.println(doubleNode1.pre().getData());//2


        System.out.println(doubleNode2.next().getData());//1
        System.out.println(doubleNode2.getData());//2
        System.out.println(doubleNode2.pre().getData());//1

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值