Java单链表的实现代码

yizhihongxing

下面是关于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实现遍历文件夹下的所有文件(递归调用和非递归调用)

    下面是JAVA实现遍历文件夹下的所有文件(递归调用和非递归调用)的攻略: 1.递归调用遍历文件夹下的所有文件 递归调用是指一个方法调用自身的过程,可以实现对多层嵌套的文件夹进行遍历。下面是一段JAVA代码可以实现递归调用遍历文件夹下的所有文件: import java.io.File; public class Test { public static vo…

    Java 2023年5月19日
    00
  • 教你利用SpringBoot写一个属于自己的Starter

    教你利用SpringBoot写一个属于自己的Starter Spring Boot Starter是一种用于简化Spring应用程序配置的机制。它可以将一组相关的依赖项打包到一个单独的模块中,并提供自动配置和其他功能。本文将详细介绍如何编写一个属于自己的Spring Boot Starter,并提供两个示例。 创建Starter项目 首先,我们需要创建一个M…

    Java 2023年5月15日
    00
  • Java实现经典游戏2048的示例代码

    以下是“Java实现经典游戏2048的示例代码”的完整攻略: 1. 确定游戏规则和逻辑 在开始编写游戏代码之前,需要先确认游戏规则和逻辑。2048游戏的规则是:玩家通过移动方块,让相同数字的方块叠加在一起,最终得到2048方块。每次移动时,所有方块会向移动的方向靠拢,相同数字的方块叠加在一起,如果四个方向都没有可以移动的方块,则游戏结束。 2. 创建代码框架…

    Java 2023年5月19日
    00
  • 超详细的Java 问题排查工具单

    下面是关于“超详细的Java问题排查工具单”的完整攻略: 1. 什么是Java问题排查工具单 Java问题排查工具单是一份记录Java应用程序运行过程中问题的清单。清单中包含各种问题,如内存泄漏、线程死锁等,以及针对每种问题的排查方法。 2. 如何使用Java问题排查工具单 当应用程序出现问题时,可以根据问题的表现、日志信息等判断问题的类型,然后根据排查清单…

    Java 2023年5月20日
    00
  • JAVA使用DBUtils操作数据库

    下面是“JAVA使用DBUtils操作数据库”的完整攻略。 简介 DBUtils是Apache组织基于JDBC封装的轻量级工具类库,可以实现JDBC的基本功能,同时大大简化了JDBC的开发流程。使用DBUtils可以少写大量重复代码,并且使代码更具可读性和可维护性。 使用步骤 第一步:添加DBUtils依赖 在Maven项目中,只需要在pom.xml文件中添…

    Java 2023年5月19日
    00
  • Mybatis 动态SQL的几种实现方法

    Mybatis 是一款开源的持久层框架,它支持动态 SQL(Dynamic SQL)语句的构建,使 SQL 语句变得更加灵活,并且可以减少代码的冗余度。下面将详细介绍几种 Mybatis 动态SQL的实现方法。 实现方式一:使用 if 标签 if 标签是 Mybatis 中常用的一个动态 SQL 标签,它可以根据条件判断来决定是否生成 SQL 语句片段,代码…

    Java 2023年5月20日
    00
  • idea创建maven项目速度慢的三种解决方案

    下面是详细讲解“idea创建maven项目速度慢的三种解决方案”的完整攻略。 1. 设置代理服务器 在idea中设置代理服务器可以让项目初始化时连接速度更快。 具体操作步骤: 1.在idea中点击“File”—>“Settings”菜单,弹出“Settings”窗口。 2.在“Settings”窗口中找到“Appearance & Beha…

    Java 2023年5月20日
    00
  • Java常用字符串方法小结

    Java常用字符串方法小结 字符串是Java中常用的数据类型之一,处理字符串的方法也是很多的。在本文中,笔者将会对Java中常用的字符串方法进行小结和总结,供读者参考。 获取字符串长度 获取字符串长度是常见的字符串操作。在Java中,可以调用length()方法获取字符串的长度。 示例代码: String str = "hello world!&q…

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