java数据结构——双向链表详解

双向链表是一种数据结构,每个节点包含对前一个和后一个节点的引用,允许正反方向遍历。插入和删除操作相比单链表更复杂,涉及四个节点的引用更新。在Java中,双向链表便于在表尾插入和删除节点。
摘要由CSDN通过智能技术生成

双向链表提供了向前遍历,也可以向后遍历整个链表,其中的问题关键就在每个链结点有两个指向其他链结点的引用。而不是一个,第一个像普通链表一样指向下一个链结点,第二个指向前一个链结点
,如图:
在这里插入图片描述双向链表的缺点是每次插入或者删除一个链结点的时候,要处理四个链结点的引用,而不是两个;两个链接前一个链结点,两个链接后一个链结点,由于多了两个引用,链结点的占用空间也变得大了一些

插入一个新的链结点,会把原来的链结点指向新的链结点,同时把新的链结点又指向前面的链结点,因为是双向链表,所以用图片更容易说清楚。

在这里插入图片描述
删除,删除的话相对来说比较复杂,假设被删除的是current所指的链结点,同时假设删除的不是第一个链结点,也不是最后一个链结点,current.previus(被删链结点的前一个链结点)的next字段指向current.next(被删链结点的后一个链结点),current.next的previous字段指向current.previous,这样就使current指向的链结点和链表断开了链接
current.previous.next = current.next;
current.next.previous = current.previous;

在这里插入图片描述
以下是代码 java代码建议对照上面的图形查看

public class DoubleLinkList {
   

    public class DoubleNode {
   
        public long data; //节点数据
        public DoubleNode next;//下一个节点
        public DoubleNode previous;//上一个节点

        public DoubleNode(long value) {
   
            this.data = value;
        }

        public void display() {
   
            System.out.print(data + " ");
        }
    }

    public DoubleNode first;//头节点
    public DoubleNode end;//尾节点

    public DoubleLinkList() {
   
        first = null;
        end = null;
    }

    /**
     * 判断是否为空
     */
    public boolean isEmpty() {
   
        return first == null;
    }

    /**
     * 在头节点插入数据
     */
    public void insertFirst
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值