手写实现双向链表

本文介绍了如何手写实现双向链表,包括双向链表的概念、特点及操作,并提供了插入新元素和删除指定节点的示例代码,展示了双向链表的双向移动特性。
摘要由CSDN通过智能技术生成

前面一篇文章写到了实现单向链表,这篇文章记录一下实现双向链表。

双向链表顾名思义就是双向的链表,双向的意思是链表可以双向移动,即从前往后遍历和从后往前遍历均可实现。

双向链表的定义:双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。——来自百度百科 

双向链表中每个节点分为三部分组成:第一部分是节点本身存储的数据,第二部部分是该节点的前一个节点的指针,第三部分是该节点下一个节点的指针。

双向链表的特点:

  1. 和单向链表一样没有容量限制
  2. 双向均可快速读写

至于线程安全的问题,由于是自定义实现,同步同步看个人喜好需要就行了。

双向链表的结构:

  

                                                                                   双向链表结构示意图

双向链表的操作:

1.插入新元素:将L1节点的Next指针指向新节点L4,将新节点L4的Pre指针指向L1,将新节点L4的Next指针指向L2,再将L2节点的Pre指针指向新节点L4。

                                                                          双向链表插入新节点示意图

2.删除指定节点:将L1节点的Next指针指向L2节,将L3节点的Pre指针指向L2节点。

下面再看看代码的实现:

自定义双向链表:

package dataStructure;

import java.util.ConcurrentModificationException;
import java.util.Iterator;
import java.util.Objects;
import java.util.function.Consumer;

/**
 * Created by Viking on 2019/4/9
 * 实现双向链表
 *
 */
    public class MyBothLinkedList<E> implements Iterable<E>{
    private transient int size;
    private transient int modCount;
    private transient Node<E> first;
    private transient Node<E> last;


    public void addFirst(E e){
        linkFirst(e);
    }
    public void addLast(E e){
        linkLast(e);
    }
    public void add(E e){
        linkLast(e);
    }
    public void add(int index, E e){
        linkIndex(index,e);
    }
    public E getFirst(){
        return first.item;
    }
    public E getLast(){
        return last.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值