Java 实现双链表

这篇具有很好参考价值的文章主要介绍了Java 实现双链表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java 实现双链表,算法是程序的灵魂,java,开发语言

双链表(Doubly Linked List)是一种常用的数据结构,它与单链表相似,但每个节点除了包含指向下一个节点的指针外,还包含一个指向前一个节点的指针。

双链表的节点由三部分组成数据域(存储节点的数据)、指向前一个节点的指针和指向后一个节点的指针。 通过这两个指针,双链表可以在前向和后向两个方向上遍历和操作节点。

双链表相对于单链表的主要优点是,它可以方便地在给定节点的前后插入或删除节点,而无需遍历查找。这使得双链表在某些场景下更加高效。

另外,双链表支持双向遍历。即可以从头节点开始,按照后继指针一直遍历到尾节点,也可以从尾节点开始,按照前驱指针一直遍历到头节点。

虽然双链表在插入和删除操作上比单链表更加灵活,但相应地也需要更多的存储空间来存储额外的指针。因此,在空间有限的情况下,需要权衡使用单链表或双链表来满足特定需求。

代码实现:

public class HeroNode2 {

    public int no;

    public String nickname;

    public HeroNode2 pre;

    public HeroNode2 next;

    public HeroNode2(int no, String nickname) {
        this.no = no;
        this.nickname = nickname;
    }

    @Override
    public String toString() {
        return "HeroNode2{" +
                "no=" + no +
                ", nickname='" + nickname + '\'' +
                '}';
    }
}
public class DoubleLinkedList {

    // 先初始化一个头节点, 头节点不要动, 不存放具体的数据
    private HeroNode2 head = new HeroNode2(0,"");

    /** 添加 */
    public void add(HeroNode2 newNode){
        if( newNode == null ){
            return;
        }
        HeroNode2 currentNode = head;
        while (currentNode.next != null){
            currentNode = currentNode.next;
        }
        currentNode.next = newNode;
        newNode.pre = currentNode;
    }

    /** 删除 */
    public void del(int no){
        if( no < 1 ){
            return;
        }
        HeroNode2 currentNode = head.next;
        while ( currentNode != null ){
            if( currentNode.no == no ){
                if( currentNode.next == null ){
                    currentNode.pre.next = null;
                }else{
                    currentNode.pre.next = currentNode.next;
                    currentNode.next.pre = currentNode.pre;
                }
                return;
            }
            currentNode = currentNode.next;
        }
    }

    /** 遍历 */
    public void show(){
        HeroNode2 currentNode = head.next;
        while (currentNode != null){
            System.out.println(currentNode);
            currentNode = currentNode.next;
        }
    }

    /** 查询 */
    public HeroNode2 getByNo(int no){
        if( no < 1 ){
            return null;
        }
        HeroNode2 currentNode = head.next;
        while ( currentNode != null ){
            if( currentNode.no == no ){
                return currentNode;
            }
            currentNode = currentNode.next;
        }
        return null;
    }
}

这段代码实现了一个双链表(DoubleLinkedList)的基本操作,包括添加节点、删除节点、遍历和根据节点编号查询节点等操作。

首先,在双链表类中初始化了一个头节点 head,该头节点不存放具体的数据,仅作为链表的起始标志。

添加节点的 add 方法通过遍历链表找到尾节点,然后将新节点加在尾节点之后,同时设置新节点的前驱指针为当前尾节点。

删除节点的 del 方法首先根据传入的节点编号查找到要删除的节点,然后根据节点的前驱和后继节点情况进行连接操作,从而将该节点从链表中删除。

遍历链表的 show 方法通过遍历输出链表中所有节点的内容,便于查看链表中的数据。

根据节点编号查询节点的 getByNo 方法通过遍历链表查找指定编号的节点,并返回该节点的引用。


双链表是一种使用两个指针的数据结构,它可以支持在节点前后插入或删除节点,并且可以在前向和后向两个方向上遍历和操作节点。



Java 实现双链表,算法是程序的灵魂,java,开发语言文章来源地址https://www.toymoban.com/news/detail-793259.html



到了这里,关于Java 实现双链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 数据结构篇-实现双链表的核心API

    🔥博客主页:  小扳_-CSDN博客 ❤感谢大家点赞👍收藏⭐评论✍       文章目录         1.0 双链表的说明         1.1 双链表 - 创建         1.2 双链表 - 根据索引查找节点         1.3 双链表 - 根据索引插入节点         1.4 双链表 - 头插节点         1.5 双链表 - 尾插

    2024年02月04日
    浏览(55)
  • Java 语言哈希查找算法实现

    哈希查找,也称为散列查找,是一种高效的查找算法。它利用哈希函数将映射到数组中的一个位置,通过直接访问该位置来获取元素,从而实现快速查找。Java语言提供了一些类和接口,例如 HashMap 和 HashTable ,使得我们可以方便地使用哈希查找算法。本文将详细介绍

    2024年02月10日
    浏览(44)
  • Java 语言实现选择排序算法

    【引言】 选择排序算法是一种简单但有效的排序算法。它的原理是每次从未排序的元素中选择最小(或最大)的元素,放在已排序的末尾(或开头),逐渐形成有序序列。本文将使用Java语言实现选择排序算法,并详细讲解其思想和代码实现。 【算法思想】 选择排序的核心思

    2024年02月11日
    浏览(54)
  • Java 语言实现归并排序算法

    【引言】 归并排序算法是一种高效且稳定的排序算法。它采用分治法的思想,将数组反复分割成两个子数组,直到每个子数组只有一个元素。然后将这些子数组逐个合并,最终得到排序完毕的数组。本文将使用Java语言实现归并排序算法,并详细讲解其核心思想和代码实现。

    2024年02月11日
    浏览(35)
  • Java 语言实现二分查找算法

    【引言】 二分查找算法是一种高效且常用的查找算法。它适用于已排序的数组或列表,并通过将目标值与中间值进行比较,来确定目标值在左侧还是右侧。本文将使用Java语言实现二分查找算法,并详细讲解其思想和代码实现。 【算法思想】 二分查找的核心思想是不断缩小查

    2024年02月11日
    浏览(33)
  • Java高级语言实现插入排序算法

    【引言】 插入排序算法是一种简单且常用的排序算法。它通过依次将未排序的元素插入已排序序列中的正确位置来达到排序的目的。本文将使用Java高级语言实现插入排序算法,并讲解其核心思想和代码实现。 【算法思想】 插入排序的核心思想是通过构建有序序列,对于未排

    2024年02月11日
    浏览(46)
  • 算法——程序的灵魂

    大家好我是艾老虎尤,算法与程序是计算机科学中两个非常重要的概念。算法是解决问题的方法和步骤,而程序是算法的具体实现。在计算机科学的世界里,算法可以被看作是程序的灵魂,它决定了程序的效率、可读性和可维护性。 在本篇博客中,我们将通过一些简单的例子

    2024年02月07日
    浏览(27)
  • 第2章 算法——程序的灵魂

    2.1 程序=算法+数据结构 一个程序主要包括以下两方面信息: (1)对数据的描述。在程序中要指定用到哪些数据,以及这些数据的类型和数据的组织形式。这就是数据结构。 (2)对操作的描述。要求计算机进行操作的步骤,也就是算法。 算法+数据结构=程序 2.4 算法的特性

    2024年02月12日
    浏览(27)
  • Java实现小程序基础开发

    2024年02月03日
    浏览(52)
  • 国密算法(SM2)java语言的实现:利用bcprov库来实现SM2算法,非对称算法

    随着密码技术和计算机技术的发展,目前常用的1024位RSA算法面临严重的安全威胁,我们国家密码管理部门经过研究,决定采用SM2椭圆曲线算法替换RSA算法。 SM2是非对称加密算法; SM2是基于椭圆曲线密码的公钥密码算法标准; SM2是国密算法,用于替换RSA/DH/ECDSA/ECDH等国际算法

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包