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日

相关文章

  • Java执行SQL脚本文件到数据库详解

    让我们详细讲解一下“Java执行SQL脚本文件到数据库详解”的完整攻略。 1. 准备工作 在Java程序中执行SQL脚本文件,需要导入以下jar包: mysql-connector-java.jar (MySQL数据库驱动包) commons-dbutils-1.6.jar (Apache DbUtils工具包) 2. 实现步骤 下面是实现Java执行SQL…

    Java 2023年5月19日
    00
  • Java限流实现的几种方法详解

    Java限流实现的几种方法详解 什么是限流 限流是指在高并发的情况下,为了保护应用系统的稳定性和可用性,通过对请求进行控制和限制,使得系统在单位时间内能够处理的请求数量达到峰值或者控制在峰值以下,以避免系统崩溃或者服务不可用。 为什么需要限流 在高并发的场景中,一旦请求量超出系统的承受范围,就会导致服务的不可用,或者服务响应变慢,最终影响到用户体验。此时,通…

    Java 2023年5月19日
    00
  • 基于java线程池读取单个SQL数据库表

    这里提供一个基于Java线程池读取单个SQL数据库表的完整攻略。 准备工作 安装并配置Java环境 安装并配置MySQL数据库环境 导入需要读取的数据库表到MySQL数据库中 创建Java Maven项目 导入依赖 在项目的pom.xml文件中添加以下依赖: <dependency> <groupId>com.zaxxer</g…

    Java 2023年5月19日
    00
  • Spring Boot 中密码加密的两种方法

    下面是关于Spring Boot中密码加密的两种方法的完整攻略。 1、使用BCryptPasswordEncoder 1.1 添加依赖 在pom.xml文件中添加如下依赖,用于使用BCryptPasswordEncoder加密密码: <dependency> <groupId>org.springframework.security&…

    Java 2023年5月20日
    00
  • Springboot中如何使用Jackson

    下面就是Spring Boot中如何使用Jackson的完整攻略。 什么是Jackson Jackson是一款用于Java平台的高效、功能强大的JSON库。它可以将Java对象转换为JSON格式的字符串,也可以将JSON格式的字符串转换为Java对象。Jackson是目前Java开发中最受欢迎的JSON库之一。 在Spring Boot中使用Jackson …

    Java 2023年5月19日
    00
  • 详解wepy开发小程序踩过的坑(小结)

    详解wepy开发小程序踩过的坑(小结) 引言 这篇文章主要为了帮助开发者更好地使用wepy框架开发小程序,同时在开发过程中不会遇到一些不必要的坑。 开发前的准备工作 在使用wepy框架开发小程序之前,我们需要先了解一些基本的知识,比如ES6、Vue.js等。同时,我们还需要安装相关的开发工具,如wepy-cli、微信开发者工具等,这里只简单列举,详细安装步骤…

    Java 2023年5月23日
    00
  • java 中MyBatis注解映射的实例详解

    Java中MyBatis注解映射的实例详解 MyBatis是一款优秀的ORM框架,它可以帮助开发者简化编码工作,并提高数据访问性能。在MyBatis中,注解映射是一种非常常用的开发方式。本文将详细讲解Java中MyBatis注解映射的实例,并提供两个示例供参考。 环境准备 在进行MyBatis注解映射前,我们需要进行一些环境准备工作。具体步骤如下: 下载My…

    Java 2023年5月20日
    00
  • Eclipse快捷键 推荐10个最有用的快捷键

    下面是Eclipse快捷键的完整攻略: 1. 常用快捷键 在Eclipse中,一些常用的快捷键包括: Ctrl + S:保存当前文件 Ctrl + C、Ctrl + X、Ctrl + V:复制、剪切、粘贴 Ctrl + Z、Ctrl + Y:撤销、重做 Ctrl + F:查找 Ctrl + Shift + R:查找某个文件并打开 2. 推荐使用的快捷键 除了…

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