Java数据结构之链表(动力节点之Java学院整理)

Java数据结构之链表(动力节点之Java学院整理)

什么是链表

链表是一种数据结构,它是由一系列节点组成的,每个节点包含数据和一个指向下一个节点的指针。与数组不同,链表中的节点在内存中不是连续存储的,而是通过指针来连接。链表的基本形式包括单向链表、双向链表和循环链表。

链表的优缺点

优点

  • 可以充分利用计算机的空间,实现灵活的内存动态管理。
  • 插入和删除操作时间复杂度为O(1),相对数组快很多。

缺点

  • 随机访问性能较差,需要从头开始遍历。
  • 占用额外的空间存储指针信息。

链表的实现

链表的实现一般包括节点定义和相应的链表操作。下面是一个简单的单向链表的实现。

节点定义

public class Node{
    public int val;
    public Node next;

    public Node(int val){
        this.val = val;
    }   
}

添加节点

public Node addNode(Node head, int val){
    Node newNode = new Node(val);
    if(head == null){
        return newNode;
    }
    Node p = head;
    while(p.next != null){
        p = p.next;
    }
    p.next = newNode;
    return head;
}

删除节点

public Node deleteNode(Node head, int val){
    if(head == null){
        return null;
    }
    if(head.val == val){
        return head.next;
    }
    Node pre = head;
    Node cur = head.next;
    while(cur != null){
        if(cur.val == val){
            pre.next = cur.next;
            return head;
        }
        pre = cur;
        cur = cur.next;
    }
    return head;
}

示例

下面是一个简单的示例,展示了如何创建一个链表并添加、删除节点。

public static void main(String[] args) {
    Node head = null;
    int[] arr = {1,2,3,4,5};
    for(int i = 0; i < arr.length; i++){
        head = addNode(head, arr[i]);
    }
    printList(head);
    head = deleteNode(head, 3);
    printList(head);
}

public static void printList(Node head){
    Node p = head;
    while(p != null){
        System.out.print(p.val + " ");
        p = p.next;
    }
    System.out.println();
}

输出结果:

1 2 3 4 5 
1 2 4 5 

以上就是链表的基本实现,可以根据需要进行相应扩展,例如双向链表、循环链表等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java数据结构之链表(动力节点之Java学院整理) - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Android实现自定义的卫星式菜单(弧形菜单)详解

    Android实现自定义的卫星式菜单(弧形菜单)详解 在Android应用中实现自定义的卫星式菜单(也称为弧形菜单)可以为用户提供一种独特的交互体验。本攻略将详细介绍如何实现这样的菜单,并提供两个示例说明。 步骤一:准备工作 在开始之前,确保你已经具备以下准备工作: Android开发环境的搭建和配置。 一个新的Android项目。 步骤二:创建自定义Vie…

    other 2023年8月21日
    00
  • Git 撤销操作、删除文件和恢复文件

    Git 撤销操作、删除文件和恢复文件 完整攻略 在 Git 工作中,有时候我们需要对一些操作进行撤销、删除或恢复。下面将详细介绍该过程的完整攻略。 撤销操作 Git 提供了多种方式可以撤销操作。以下介绍撤销原操作的方法。 1. 撤销未提交的修改 如果我们修改了某些文件但是还没有提交,我们可以使用以下命令来撤销这些修改: git checkout filena…

    other 2023年6月26日
    00
  • fpga开发详细流程你了解吗?

    以下是“FPGA开发详细流程你了解吗?”的完整攻略,包括过程中的两个示例说明。 FPGA开发详细流程 FPGA是一种可编程逻辑器件,可以用于实现各种数字电路。在进行FPGA开发时,需要掌握一些基础知识和开发流程。以下是一份关于FPGA开发详细流程的攻略。 1. FPGA基础知识 在开始FPGA开发之前,我们需要掌握一些基础知识,例如: FPGA的基础知识,包…

    other 2023年5月10日
    00
  • C语言深入讲解内存操作问题

    C语言深入讲解内存操作问题 介绍 在C语言中,内存操作是非常重要的一部分。了解如何正确地操作内存可以帮助我们编写高效、可靠的程序。本攻略将详细讲解C语言中的内存操作问题,包括内存分配、指针操作和内存泄漏等。 内存分配 在C语言中,我们可以使用malloc函数来动态分配内存。malloc函数接受一个参数,即所需内存的大小(以字节为单位),并返回一个指向分配内存…

    other 2023年8月1日
    00
  • 怎么打乱重置Win10开始菜单磁贴布局?

    要打乱和重置Windows 10开始菜单磁贴布局,您可以按照以下步骤进行操作: 打开开始菜单:单击任务栏上的“开始”按钮或按下Windows键。 进入开始菜单布局编辑模式:右键单击开始菜单上的任何一个磁贴,然后选择“更多”选项。 重置磁贴布局:在弹出的菜单中,选择“重置”选项。这将还原开始菜单的默认布局,删除所有自定义的磁贴。 打乱磁贴布局:要打乱磁贴的布局…

    other 2023年9月5日
    00
  • Flutter实现下拉刷新和上拉加载更多

    下面是针对“Flutter实现下拉刷新和上拉加载更多”的完整攻略: Flutter实现下拉刷新和上拉加载更多 1. 简介 下拉刷新和上拉加载更多是移动端APP开发中常用的功能,它们可以提高用户体验和应用的交互性。Flutter框架提供了很多开箱即用的控件来帮助我们实现这些功能。本篇文章将介绍如何使用Flutter框架实现下拉刷新和上拉加载更多。 2. 下拉刷…

    other 2023年6月25日
    00
  • 详解css3自定义滚动条样式写法

    详解 CSS3 自定义滚动条样式写法 CSS3 中提供了一种自定义滚动条的方法,可以通过 CSS 样式来控制滚动条的外观样式和布局等。下面将详细讲解如何实现自定义滚动条样式。 步骤1. 添加样式到滚动条 在 CSS3 中,我们可以使用 ::-webkit-scrollbar 伪元素来控制滚动条的样式。 ::-webkit-scrollbar { width:…

    other 2023年6月25日
    00
  • 锐捷认证时显示用户动态ip地址类型绑定错误的解决方法

    锐捷认证时显示用户动态IP地址类型绑定错误的解决方法攻略 问题描述 在锐捷认证过程中,有时会出现用户动态IP地址类型绑定错误的情况。这种错误可能导致用户无法成功认证并访问网络。本攻略将详细介绍如何解决这个问题。 解决方法 以下是解决用户动态IP地址类型绑定错误的步骤: 确认网络连接状态:首先,确保计算机或设备已正确连接到网络。检查网络连接是否正常,确保网络线…

    other 2023年7月31日
    00
合作推广
合作推广
分享本页
返回顶部