Java链表操作示例

一、什么是链表

链表是一种数据结构,它由多个节点(node)组成,每个节点包含两个属性,一个是存储的数据,另一个是指向下一个节点的指针。链表的优势在于可以动态的增加和删除元素。相对于数组而言,链表的内存分配更加灵活,但是在访问某个节点时需要遍历整个链表,时间复杂度为O(n)。

二、创建链表

下面是一个简单的链表实现,它包括链表的节点类和链表类:

class Node {
    int data;
    Node next;

    public Node(int data) {
        this.data = data;
        this.next = null;
    }
}

class LinkedList {
    Node head;

    public LinkedList() {
        this.head = null;
    }

    public void add(int data) {
        Node node = new Node(data);
        if (this.head == null) {
            this.head = node;
        } else {
            Node temp = this.head;
            while (temp.next != null) {
                temp = temp.next;
            }
            temp.next = node;
        }
    }
}

三、链表的遍历

遍历链表指的是依次访问链表中每个节点。下面是遍历链表的一个示例方法:

public void traverse() {
    Node temp = this.head;
    while (temp != null) {
        System.out.print(temp.data + " ");
        temp = temp.next;
    }
    System.out.println();
}

四、在链表中插入一个新节点

下面给出了在链表中插入新节点的方法,如需在链表的第 i 个位置插入新节点,需要先定位到该位置的前一个节点,然后将新节点插入该节点之后。

public void insert(int data, int index) {
    Node node = new Node(data);

    if (index == 0) {
        node.next = this.head;
        this.head = node;
        return;
    }

    Node temp = this.head;
    for (int i = 0; i < index - 1; i++) {
        temp = temp.next;
    }

    node.next = temp.next;
    temp.next = node;
}

五、在链表中删除一个节点

从链表中删除节点的方法需要先定位到待删节点的前一个节点,然后将前一个节点的指针指向待删节点的下一个节点。

public void remove(int data) {
    if (this.head == null) {
        return;
    }

    if (this.head.data == data) {
        this.head = this.head.next;
        return;
    }

    Node temp = this.head;
    while (temp.next != null && temp.next.data != data) {
        temp = temp.next;
    }

    if (temp.next != null) {
        temp.next = temp.next.next;
    } else {
        System.out.println("节点不存在");
    }
}

六、链表的反转

反转链表指的是反转链表中节点的顺序。下面是一个递归实现的反转链表方法:

public Node reverse(Node node) {
    if (node == null || node.next == null) {
        return node;
    }

    Node head = reverse(node.next);
    node.next.next = node;
    node.next = null;
    return head;
}

七、链表的排序

链表的排序指的是对链表中节点的数据进行排序。下面是一个使用快速排序的链表排序方法:

public Node sort(Node node) {
    if (node == null || node.next == null) {
        return node;
    }

    int pivot = node.data;
    Node left = null;
    Node right = null;
    node = node.next;

    while (node != null) {
        Node next = node.next;
        if (node.data < pivot) {
            node.next = left;
            left = node;
        } else {
            node.next = right;
            right = node;
        }
        node = next;
    }

    left = sort(left);
    right = sort(right);
    Node result = left;
    while (left != null && left.next != null) {
        left = left.next;
    }
    if (left != null) {
        left.next = new Node(pivot);
    } else {
        result = new Node(pivot);
        left = result;
    }
    left.next = right;
    return result;
}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/227247.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝的头像小蓝
上一篇 2024-12-09 16:28
下一篇 2024-12-09 16:28

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • 利用Python实现两个链表合并为一个有序链表

    对于开发工程师来说,实现两个链表合并为一个有序链表是必须掌握的技能之一。Python语言在链表处理上非常便利,本文将从多个方面详细阐述如何利用Python实现两个链表合并为一个有序…

    编程 2025-04-29
  • Python栈操作用法介绍

    如果你是一位Python开发工程师,那么你必须掌握Python中的栈操作。在Python中,栈是一个容器,提供后进先出(LIFO)的原则。这篇文章将通过多个方面详细地阐述Pytho…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29

发表回复

登录后才能评论