【JAVASE小新】LinkedList的说明和简单模拟双向链表

本文详细介绍了Java中的LinkedList数据结构,探讨其特性与内部实现,并通过实例代码模拟双向链表的增删改查操作,加深对链表理解。

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

package Gather.CollectionArrayList.List.LinkedList;

/**
 * @author 小王宝友
 * @version 3.89
 * LinkedList说明:
 * LinkedList底层实现了双向链表和双端队列特点
 * 可以添加任意元素(元素可以重复),包括null
 * 线程不安全,没有实现同步和互斥
 * LinkedList的底层说明:
 * 1、LinkedList底层维护了一个双向链表
 * 2、LinkedList中维护了两个属性:first和last分别指向"首节点"和"尾节点"
 * 3、每个节点(Node对象),里面又维护了prev、next、item三个属性
 *      其中prev指向前一个节点,通过next指向后一个节点,从而实现双向链表
 * 4、LinkedList的元素的添加或是删除都不是通过数组完成的,相对来说效率较高
 * 下面模拟一个简单的双向链表
 *
 *
 */
public class TestDoubly {
    public static void main(String[] args) {
        //双向链表
        Node tom = new Node("Tom");
        Node lsp = new Node("LSP");
        Node jack = new Node("jack");

        //连接三个节点,形成双向链表
        //jack->tom->lsp
        jack.next = tom;
        tom.next = lsp;
        //lsp->tom->jack
        lsp.pre = tom;
        tom.pre = jack;

        Node first = jack;//让first引用指向jack,就是双向链表的头结点
        Node last = lsp;//让last引用指向tom,就是双向链表的尾结点

        //双向链表的遍历
        System.out.println("=====头到尾=====");
        while (true){
//          判断头指针是否为空
            if (first == null){
                break;
            }
            //输出first的信息
            System.out.println(first);
            //输出完第一个first信息后让first等于下一个对象信息
            first = first.next;
        }
        System.out.println("=====尾到头=====");
        while (true){
//          判断头指针是否为空
            if (last == null){
                break;
            }
            //输出last的信息
            System.out.println(last);
            //输出完第一个last信息后让last等于前一个对象信息
            last = last.pre;
        }
        //双向链表添加对象/数据
        System.out.println("===在jack和tom之间插入一个元素===");
        //创建一个Node节点
        Node rose = new Node("rose");

        jack.next = rose;
        rose.next = tom;

        tom.pre = rose;
        rose.pre = jack;

        first = jack;//让first重新指向第一个节点
        last = lsp;//让last重新指向最后一个节点

        while (true){
//          判断头指针是否为空
            if (first == null){
                break;
            }
            //输出first的信息
            System.out.println(first);
            //输出完第一个first信息后让first等于下一个对象信息
            first = first.next;
        }


    }
}
//定义一个Node类,Node对象表示双向链表的一个节点
class Node{
    public Object item;//真正存放数据的地方
    public Node next;//指向后一个节点
    public Node pre;//指向前一个节点
    public Node(Object name){
        this.item = name;
    }

    @Override
    public String toString() {
        return "Node name = " + item;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值