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日

相关文章

  • 三天吃透计算机网络八股文

    网络分层结构 计算机网络体系大致分为三种,OSI七层模型、TCP/IP四层模型和五层模型。一般面试的时候考察比较多的是五层模型。最全面的Java面试网站 五层模型:应用层、传输层、网络层、数据链路层、物理层。 应用层:为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统DNS、HTTP协议、SMTP协议等。 传输层:负责向两台主机进程之间的通信提供…

    Java 2023年4月17日
    00
  • JSP+Servlet+JavaBean实现登录网页实例详解

    让我来为你详细讲解关于“JSP+Servlet+JavaBean实现登录网页实例”的攻略。本攻略主要包括以下内容: 环境搭建 创建登录页面 编写Servlet 编写JavaBean 实现功能 示例说明 1. 环境搭建 首先,我们需要准备好环境。在开始之前,确保你已经完成以下准备工作: 安装好Java开发环境,包括JDK和IDE(例如Eclipse、Intel…

    Java 2023年6月15日
    00
  • Android UI设计与开发之使用ViewPager实现欢迎引导页面

    下面是使用ViewPager实现欢迎引导页面的完整攻略: 1. 准备工作 在开始实现之前需要进行一些准备工作: 在Android studio中创建一个新项目。 在app目录下的build.gradle文件中添加以下依赖: implementation ‘androidx.viewpager2:viewpager2:1.0.0’ 创建一个初始的欢迎引导布局文…

    Java 2023年6月1日
    00
  • springmvc集成shiro登录权限示例代码

    下面是关于SpringMVC集成Shiro登录权限的完整攻略,包含两个示例说明。 SpringMVC集成Shiro登录权限示例代码 Shiro是一个强大的Java安全框架,它提供了身份验证、授权、加密等功能。在SpringMVC中集成Shiro可以帮助我们更好地管理用户的登录和权限。在本文中,我们将介绍如何在SpringMVC中集成Shiro,并提供两个示例…

    Java 2023年5月17日
    00
  • MyBatis Generator的简单使用方法示例

    MyBatis Generator 的简单使用方法示例 什么是 MyBatis Generator MyBatis Generator 是一个基于 Java 的代码生成器,可以快速为 MyBatis 创建数据访问层代码。使用 MyBatis Generator 可以自动生成 MyBatis 的 POJO 类、Mapper 接口和 SQL 映射文件。 MyBa…

    Java 2023年5月20日
    00
  • java实现动态代理示例分享

    下面是“java实现动态代理示例分享”的完整攻略: 什么是动态代理? 在Java中,代理是一种常见的设计模式。代理模式的主要作用是提供间接访问,控制对对象的访问。代理模式使得代理对象可以在不改变原始对象的情况下,对对象的访问进行扩展。动态代理是一种特殊类型的代理模式,它是在程序运行时动态地创建代理对象,而不是在编译时就定义。 在Java中,动态代理是通过代理…

    Java 2023年5月30日
    00
  • 详解Java中String JSONObject JSONArray List<实体类>转换

    下面是详解Java中String、JSONObject、JSONArray以及List<实体类>之间的转换攻略。 将String转换为JSONObject 在Java中,可以通过JSONObject类将一个字符串转换为JSON对象,具体操作如下: String jsonString = "{\"name\":\&qu…

    Java 2023年5月26日
    00
  • Struts2学习笔记(5)-参数传递方法

    下面给出Struts2学习笔记(5)-参数传递方法的完整攻略。 1. 参数传递方法 Struts2框架提供了多种参数传递方法,包括: 基于动态属性的参数传递方法 基于XLST的参数传递方法 基于注解的参数传递方法 基于拦截器的参数传递方法 1.1 基于动态属性的参数传递方法 在Struts2中,可以通过设置动态属性来进行参数传递。需要为Action类的变量提…

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