从零单刷数据结构(Java描述)(十)——双向链表

本文深入解析双向链表的结构与实现,通过代码示例详细介绍了双向链表的节点构造、前后节点连接及数据获取方法,适合初学者理解双向链表的基本原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

双向链表(double linked list)是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。
即双向链表有两个指针域,一个指向直接后继,一个指向直接前驱。

在这里插入图片描述

class DoubleNode{
 //上一个结点
 DoubleNode pre=this;
 //下一个结点
 DoubleNode next=this;
 //结点数据
 int data;
 
 public DoubleNode(int data){
     this.data=data;
 }

 //增加结点
 public void after(DoubleNode node){
     //原来的下一个结点
     DoubleNode nextNext=next;
     //把新结点作为当前节点的下一个结点
     this.next=node;
     //把当前结点作为新结点的前一个结点
     node.pre=this;
     //让原来的下一个结点作为新结点的下一个结点
     node.next=nextNext;
     //让原来的下一个结点的上一个结点为新结点
     nextNext.pre=node;
 }

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

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

 //获取数据
 public int getData() {
     return this.data;
 }
}
//测试类
public class TestDoubleNode{
    public static void main(String[] args) {
        //创建结点
        DoubleNode n1= new DoubleNode(1);
        DoubleNode n2= new DoubleNode(2);
        DoubleNode n3= new DoubleNode(3);

        //查看上一个、自己、下一个结点的内容
        //输出 1 1 1
        System.out.println(n1.pre().getData());
        System.out.println(n1.getData());
        System.out.println(n1.next().getData());

        //追加结点
        n1.after(n2);
        n2.after(n3);
        
        //测试
        //输出 1 2 3 1 3 
        System.out.println(n2.pre().getData());
        System.out.println(n2.getData());
        System.out.println(n2.next().getData());
        System.out.println(n3.next().getData());
        System.out.println(n1.pre().getData());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值