java数据结构实现双向链表功能

Java数据结构中实现双向链表,可以按照以下步骤进行:

1.定义节点类Node,包含成员变量value、previous、next:

public class Node {
    int value;
    Node previous;
    Node next;
    public Node(int v) {
        value = v;
    }
}

2.定义双向链表类DLinkedList,初始化头尾节点head和tail:

public class DLinkedList {
    Node head;
    Node tail;
    public DLinkedList() {
        head = new Node(0);
        tail = new Node(0);
        head.next = tail;
        tail.previous = head;
    }
}

3.实现双向链表的添加节点方法 addNode(int val):

public void addNode(int val) {
    Node newNode = new Node(val);
    newNode.previous = tail.previous;
    tail.previous.next = newNode;
    newNode.next = tail;
    tail.previous = newNode;
}

4.实现双向链表的删除节点方法 deleteNode(int val):

public void deleteNode(int val) {
    Node current = head.next;
    while (current != tail) {
        if (current.value == val) {
            current.previous.next = current.next;
            current.next.previous = current.previous;
            break;
        }
        current = current.next;
    } 
}

5.实现双向链表的打印方法 printList():

public void printList() {
    Node current = head.next;
    while (current != tail) {
        System.out.print(current.value + " ");
        current = current.next;
    }
}

示例1:创建一个双向链表,添加四个节点并打印

DLinkedList list = new DLinkedList();
list.addNode(1);
list.addNode(2);
list.addNode(3);
list.addNode(4);
list.printList();

输出结果为:1 2 3 4

示例2:在示例1的基础上删除节点3并打印

list.deleteNode(3);
list.printList();

输出结果为:1 2 4

阅读剩余 41%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java数据结构实现双向链表功能 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • MySQL 5.7.9 服务无法启动-“NET HELPMSG 3534”的解决方法

    MySQL 5.7.9 服务无法启动-“NET HELPMSG 3534”的解决方法 当我们尝试启动MySQL 5.7.9服务时,可能会遇到以下错误: “error 1067 the process terminated unexpectedly”,然后我们通过命令行方式尝试手动启动该服务,而结果提示了 “NET HELPMSG 3534” 错误。如下所示:…

    other 2023年6月27日
    00
  • Scala之Object的具体使用(小结)

    下面是详细讲解“Scala之Object的具体使用(小结)”的完整攻略: 1. Object的介绍 在Scala中,Object是一种特殊的class,它只有一个单例实例。我们可以把Object看成是一些静态的方法和属性的集合,这些方法和属性可以通过Object访问,而不需要对Object进行实例化操作。因此,Object可以看成是Scala中的静态类。 2…

    other 2023年6月26日
    00
  • 浅谈SpringBoot Bean加载优先级的问题

    浅谈Spring Boot Bean加载优先级的问题 问题背景 在Spring Boot应用中,Bean的加载顺序可能会对应用程序的正确性产生影响。了解Spring Boot Bean加载优先级的原理将有助于我们更好地管理应用程序的依赖关系和初始化顺序。 Bean加载优先级 Spring Boot使用@Bean注解来标记一个Bean,Bean的加载优先级通常…

    other 2023年6月28日
    00
  • 真我Realme GT Neo5如何强制重启 真我Realme GT Neo5黑屏死机强制关机重启快捷键

    以下是针对真我Realme GT Neo5如何强制重启和如何进行黑屏死机强制关机重启的攻略,每条攻略都会包含详细的步骤和相关示例说明。 真我Realme GT Neo5如何强制重启 如果你的真我Realme GT Neo5出现了一些意外情况,比如系统崩溃或者应用程序无响应等情况,此时你可以考虑进行强制重启。 下面是真我Realme GT Neo5如何进行强制…

    other 2023年6月27日
    00
  • windowsdefender和windowsfirewall

    Windows Defender和Windows Firewall Windows Defender和Windows Firewall是Windows操作系统内置的两个防病毒软件。其中Windows Defender专门用于检测和清除计算机中的病毒、恶意软件和间谍软件,而Windows Firewall则用于保护计算机免受网络攻击。在本文中,我们将介绍这两个…

    其他 2023年3月28日
    00
  • 详解使用MyBatis Generator自动创建代码

    详解使用MyBatis Generator自动创建代码的完整攻略 MyBatis Generator是一个强大的工具,可以根据数据库表结构自动生成MyBatis的Mapper接口、实体类和映射文件。以下是使用MyBatis Generator自动创建代码的详细步骤: 配置MyBatis Generator 在项目的pom.xml文件中添加MyBatis Ge…

    other 2023年10月14日
    00
  • JavaScript面向对象设计二 构造函数模式

    JavaScript 面向对象设计二 构造函数模式 构造函数和普通函数的区别 在JavaScript中,构造函数和普通函数的区别在于函数的调用方式不同。 普通函数使用 function 声明,调用方式是 函数名() 。 而构造函数使用 function 声明,调用方式是使用 new 操作符来调用。 构造函数模式的基本使用方法 构造函数通常用来创建一个对象,并…

    other 2023年6月26日
    00
  • 从UI Automation看Windows平台自动化测试原理

    UI Automation是Windows平台上的一种自动化测试技术,它可以模拟用户操作,对Windows应用程序进行自动化测试。在本文中,我们将详细介绍UI Automation的原理和使用方法,并提供两个示例说明。 UI Automation的原理 UI Automation是一种基于Microsoft Active Accessibility(MSAA…

    other 2023年5月5日
    00
合作推广
合作推广
分享本页
返回顶部