Java单链表的实现代码

下面是关于Java单链表的实现代码的完整攻略:

什么是单链表?

单链表是一种常见的数据结构,它由节点构成,每个节点包括一个数据域和一个指针域,指针指向下一个节点。单链表有头节点和尾节点,头节点不存储具体数据,用于表示单链表的起点,尾节点的指针指向null(空)。

如何实现单链表?

首先,我们要定义单链表的节点:

class Node<T> {
    T value;   // 数据域
    Node<T> next;  // 指针域,指向下一个节点

    Node(T value) {
        this.value = value;
    }
}

然后,我们可以定义单链表类:

class LinkedList<T> {
    Node<T> head;   // 定义头节点

    LinkedList() {
        head = new Node<>(null);
    }

    // 在链表末尾添加一个节点
    void add(T value) {
        Node<T> node = new Node<>(value);
        Node<T> curNode = head;
        while (curNode.next != null) {
            curNode = curNode.next;
        }
        curNode.next = node;
    }

    // 删除第index个节点
    void remove(int index) {
        if (index < 1) {
            System.out.println("超过范围");
            return;
        }
        Node<T> curNode = head;
        int i = 1;
        while (curNode.next != null && i < index) {
            curNode = curNode.next;
            i++;
        }
        if (i == index && curNode.next != null) {
            curNode.next = curNode.next.next;
        } else {
            System.out.println("超过范围");
        }
    }

    // 输出链表中的所有节点的值
    void print() {
        Node<T> curNode = head.next;
        while (curNode != null) {
            System.out.print(curNode.value + " ");
            curNode = curNode.next;
        }
        System.out.println();
    }
}

其中,add方法可以在链表末尾添加一个节点,remove方法可以删除第index个节点,print方法可以输出链表上所有节点的值。

如何使用单链表?

下面来看两个使用单链表的示例:

示例1:用单链表实现一个简单的队列

// 定义队列类
class Queue<T> {
    LinkedList<T> linkedList;

    Queue() {
        linkedList = new LinkedList<>();
    }

    // 插入一个元素
    void push(T value) {
        linkedList.add(value);
    }

    // 弹出一个元素
    T pop() {
        Node<T> head = linkedList.head;
        if (head.next == null) {
            System.out.println("队列为空");
            return null;
        }
        Node<T> first = head.next;
        head.next = first.next;
        return first.value;
    }
}

// 测试代码
public class Main {
    public static void main(String[] args) {
        Queue<Integer> queue = new Queue<>();
        queue.push(1);
        queue.push(2);
        queue.push(3);
        System.out.println(queue.pop());  // 输出 1
        System.out.println(queue.pop());  // 输出 2
        queue.push(4);
        System.out.println(queue.pop());  // 输出 3
        System.out.println(queue.pop());  // 输出 4
        System.out.println(queue.pop());  // 输出 队列为空,并返回null
    }
}

在这个示例中,我们定义了一个Queue类,用单链表实现了队列的基本功能。

示例2:用单链表实现一个简单的斐波那契数列

// 用单链表实现斐波那契数列
class Fibonacci {
    LinkedList<Integer> linkedList;

    Fibonacci() {
        linkedList = new LinkedList<>();
        linkedList.add(0);
        linkedList.add(1);
    }

    // 获取第n个斐波那契数
    int get(int n) {
        if (n < 1) {
            System.out.println("不存在第" + n + "个斐波那契数");
            return -1;
        }
        while (linkedList.head.next == null || linkedList.head.next.value < n) {
            int len = linkedList.head.next == null ? 1 : linkedList.head.next.value;
            int last = linkedList.head.next == null ? 0 : linkedList.head.next.next.value;
            linkedList.add(len + last);
        }
        if (linkedList.head.next.value > n) {
            System.out.println("不存在第" + n + "个斐波那契数");
            return -1;
        } else {
            return linkedList.head.next.next.value;
        }
    }
}

// 测试代码
public class Main {
    public static void main(String[] args) {
        Fibonacci fibonacci = new Fibonacci();
        System.out.println(fibonacci.get(0));  // 输出 -1
        System.out.println(fibonacci.get(1));  // 输出 0
        System.out.println(fibonacci.get(2));  // 输出 1
        System.out.println(fibonacci.get(9));  // 输出 21
        System.out.println(fibonacci.get(10));  // 输出 34
        System.out.println(fibonacci.get(11));  // 输出 55
    }
}

在这个示例中,我们定义了一个Fibonacci类,用单链表实现了斐波那契数列中获取第n个斐波那契数的功能。

以上就是关于Java单链表的实现代码的完整攻略,包括单链表的定义、实现和使用的两个示例,希望能够对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java单链表的实现代码 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • Spring创建bean对象三种方式代码实例

    下面是关于Spring创建bean对象三种方式的详细讲解和两条示例说明。 一、Spring创建bean对象的三种方式 在Spring框架中创建bean对象有三种方式:通过构造方法创建、静态工厂方法创建和实例工厂方法创建。 1. 通过构造方法创建 这是最常见的创建bean对象的方法,Spring容器会根据构造函数创建对象并维护该对象的生命周期。 1.1 示例说…

    Java 2023年5月26日
    00
  • Java 泛型有哪些好处详解

    Java 泛型有哪些好处详解 Java 泛型是 JDK 1.5 中引入的概念,其主要目的是增加代码的可读性、可维护性和类型安全。本文将详细讲解 Java 泛型的好处以及如何使用。 好处 1. 类型安全 Java 泛型可以在编译时检查类型安全,可以有效地避免类型转换错误,减少由于类型错误而引起的错误和异常。例如: List<String> list…

    Java 2023年5月26日
    00
  • Java数组实现动态初始化的实例详解

    Java数组实现动态初始化的实例详解 在Java中,我们可以通过数组来存储具有相同类型的多个变量。通过动态初始化,我们可以在声明数组时直接为数组元素分配空间并进行初始化。 数组动态初始化的语法 Java中动态初始化数组可以按如下的方式进行: DataType[] arrayName = new DataType[arrayLength]; 其中,DataTy…

    Java 2023年5月26日
    00
  • 教你用Java GUI实现文本文件的读写

    教你用Java GUI实现文本文件的读写 如果你想在Java图形用户界面(GUI)中实现文本文件的读写,可以按照以下步骤操作: 1. 创建GUI界面 首先,需要创建一个GUI界面,让用户可以输入和查看文件的内容。可以使用Swing或JavaFX等GUI框架来创建GUI界面。 以下是一个简单的使用JavaFX创建GUI界面的示例代码: import javaf…

    Java 2023年5月20日
    00
  • Java正则判断日期格式是否正确的方法示例

    下面是关于Java正则判断日期格式是否正确的方法示例的完整攻略。 步骤一: 导入相关类库 在使用正则表达式的时候,我们需要使用Java自带的正则表达式类来完成相关操作。因此,我们需要先在代码中导入相关类库。具体代码如下: import java.util.regex.Matcher; import java.util.regex.Pattern; 步骤二: …

    Java 2023年5月20日
    00
  • Java解析JSON数据时报错问题解决方案

    下面是“Java解析JSON数据时报错问题解决方案”的完整攻略,包含以下几个部分: 问题描述 在Java程序中使用第三方库解析JSON数据时,可能会出现各种报错,如JSON解析异常、数据类型不匹配等。 解决方案 针对这些问题,可以尝试以下解决方案: 1. 使用合适的JSON解析库 Java中有很多JSON解析库,如GSON、Jackson、Fastjson等…

    Java 2023年5月26日
    00
  • Tomcat7.0安装配置详细(图文)

    下面是关于“Tomcat7.0安装配置详细(图文)”的攻略: Tomcat7.0安装配置详细(图文) 介绍 Tomcat是一个开放源代码的Web服务器,也是一个servlet容器,是Apache软件基金会的一个核心项目。Tomcat 7是Tomcat的一个稳定版本,本文将详细介绍它的安装和配置。 安装 步骤1: 下载Tomcat7.0安装包 前往Apache…

    Java 2023年5月19日
    00
  • java WebSocket 服务端实现代码

    下面是实现Java WebSocket服务端的完整攻略,包括示例说明。 准备工作 在开始编写WebSocket服务端代码之前,需要先确保拥有以下条件: Java开发环境,最好使用JDK8或以上版本。 WebSocket API,Java提供了JSR-356标准的WebSocket API,可以通过Maven添加依赖以使用API。 <dependency…

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