java 数据结构单链表的实现

Java中实现单链表数据结构通常需要以下几个步骤:

1. 定义节点类

首先需要定义一个节点类,用于表示链表中的一个节点。每个节点包含两个属性:data表示节点的数据,next表示节点的下一个节点。这两个属性都需要定义为public,以便后续操作的访问。

public class Node {
  public int data;
  public Node next;

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

2. 定义链表类

接下来需要定义一个链表类,用于对节点进行管理。链表类需要包含两个属性:head表示链表的头节点,size表示链表中节点的数量。

public class LinkedList {
  public Node head;
  public int size;

  public LinkedList() {
    head = null;
    size = 0;
  }
}

3. 实现插入操作

插入操作常见有三种:在头部插入、在尾部插入、在指定位置插入。具体实现方式如下:

在头部插入

在头部插入可以通过以下代码实现:

public void insertAtHead(int data) {
  Node newNode = new Node(data);
  newNode.next = head;
  head = newNode;
  size++;
}

在尾部插入

在尾部插入可以通过以下代码实现:

public void insertAtTail(int data) {
  Node newNode = new Node(data);
  if (head == null) {
    head = newNode;
  } else {
    Node currentNode = head;
    while (currentNode.next != null) {
      currentNode = currentNode.next;
    }
    currentNode.next = newNode;
  }
  size++;
}

在指定位置插入

在指定位置插入可以通过以下代码实现:

public void insertAtIndex(int index, int data) {
  if (index < 0 || index > size) {
    throw new IndexOutOfBoundsException("Invalid index");
  }
  if (index == 0) {
    insertAtHead(data);
  } else if (index == size) {
    insertAtTail(data);
  } else {
    Node currentNode = head;
    for (int i = 1; i < index; i++) {
      currentNode = currentNode.next;
    }
    Node newNode = new Node(data);
    newNode.next = currentNode.next;
    currentNode.next = newNode;
    size++;
  }
}

4. 实现删除操作

删除操作通常有两种:删除头部节点、删除指定位置节点。具体实现方式如下:

删除头部节点

删除头部节点可以通过以下代码实现:

public void deleteAtHead() {
  if (head != null) {
    head = head.next;
    size--;
  }
}

删除指定位置节点

删除指定位置节点可以通过以下代码实现:

public void deleteAtIndex(int index) {
  if (index < 0 || index >= size) {
    throw new IndexOutOfBoundsException("Invalid index");
  }
  if (index == 0) {
    deleteAtHead();
  } else {
    Node currentNode = head;
    for (int i = 1; i < index; i++) {
      currentNode = currentNode.next;
    }
    currentNode.next = currentNode.next.next;
    size--;
  }
}

示例说明

下面通过两个示例说明单链表的实现:

LinkedList list = new LinkedList();
list.insertAtHead(3); // 在头部插入3
list.insertAtTail(4); // 在尾部插入4
list.insertAtIndex(1, 5); // 在位置1插入5,此时链表为3->5->4
list.deleteAtIndex(1); // 删除位置1的节点,此时链表为3->4
LinkedList list = new LinkedList();
list.insertAtTail(1); // 在尾部插入1
list.insertAtIndex(1, 2); // 在位置1插入2,此时链表为1->2
list.insertAtIndex(0, 3); // 在头部插入3,此时链表为3->1->2
list.deleteAtIndex(1); // 删除位置1的节点,此时链表为3->2

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 数据结构单链表的实现 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • 带你了解Java数据结构和算法之数组

    带你了解Java数据结构和算法之数组 在本教程中,我们将学习Java中的数组数据结构和对应的算法。让我们先来了解什么是数组。 什么是数组? 数组是一个同类型数据元素的集合,在内存中连续存储。数组具有索引性,我们可以使用索引值来访问数组中的元素。 声明和初始化数组 在Java中,声明一个数组需要指定以下三个参数: 数组的类型 数组的名称 数组的大小 以下是一个…

    数据结构 2023年5月17日
    00
  • 关于图片存储格式的整理(BMP格式介绍)

    关于图片存储格式的整理(BMP格式介绍) 一、BMP格式概述 BMP全称为Bitmap,是一种基础的图像保存格式,它的格式十分简单,就是将每个像素点的颜色信息直接保存在文件中,因此它的信息量相对较大。 BMP格式的文件头有标准结构,其中包含位图的宽、高、颜色数、位图大小等信息,其中颜色数的位数(色深)决定了BMP文件的大小。BMP文件还可以包含调色板,来进行…

    数据结构 2023年5月17日
    00
  • C语言数据结构之算法的时间复杂度

    关于C语言数据结构之算法的时间复杂度,需要先了解一些基本概念。 什么是时间复杂度 时间复杂度是算法的一种衡量标准,用于评估算法的执行效率。表示代码执行的时间和数据量之间的关系,通常用大O符号来表示,称为“大O记法”。 时间复杂度的分类 时间复杂度可分为以下几类: 常数阶:O(1) 对数阶:O(log n) 线性阶:O(n) 线性对数阶:O(n log n) …

    数据结构 2023年5月17日
    00
  • java实现数据结构单链表示例(java单链表)

    下面是 Java 实现数据结构单链表的完整攻略。 简介 单链表是数据结构中的一种,用于存储一组有序的元素。单链表中,每个元素都由一个结点表示,结点中包含了一个指向下一个结点的指针。单链表的结构更加灵活,支持插入、删除等操作。 实现步骤 1. 定义节点类ListNode 单链表的每一个节点包含两个属性,分别是节点值 val 和指向下一个节点的指针 next,所…

    数据结构 2023年5月17日
    00
  • JavaScript队列数据结构详解

    JavaScript队列数据结构详解 本文将为大家详细讲解JavaScript队列数据结构的相关知识。 什么是队列数据结构 队列是一种线性数据结构,它只允许在队列的两端进行插入和删除操作。在队列中,新元素插入到队列的末尾,也称为队尾。而删除操作则是从队列的前面删除元素,也称为队首。 将元素插入队列的操作称为入队,将元素删除队列的操作称为出队。除此之外,还有一…

    数据结构 2023年5月17日
    00
  • 题目 3158: 蓝桥杯2023年第十四届省赛真题-三国游戏(贪心)

    题目描述 小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵X, Y, Z (一开始可以认为都为 0 )。游戏有 n 个可能会发生的事件,每个事件之间相互独立且最多只会发生一次,当第 i 个事件发生时会分别让 X, Y, Z 增加Ai , Bi ,Ci 。当游戏结束时 (所有事件的发生与否已经确定),如果 X, Y, Z 的其中一个大于另外两个之…

    算法与数据结构 2023年4月30日
    00
  • JS中数据结构之栈

    接下来我将为大家讲解JS中数据结构之栈的完整攻略。 一、栈的定义 栈是一种受限的线性数据结构,它具有先进后出(Last In First Out, LIFO)的特点,即后进入的元素先出来。栈主要有两个操作:入栈和出栈,同时还需要考虑栈空和栈满两种特殊情况。 二、栈的实现 在JS中,可以通过数组来实现栈的功能。下面是一个实现栈的类: class Stack {…

    数据结构 2023年5月17日
    00
  • java实现队列数据结构代码详解

    Java实现队列数据结构代码详解 1. 队列数据结构简介 队列(Queue)是一种先进先出(FIFO)的数据结构,支持在一端插入元素,在另一端删除元素并返回删除的元素。其操作包括入队(enqueue)和出队(dequeue)。 2. 队列实现方法 队列可以通过数组或链表来实现。其中,数组实现的队列称为顺序队列,链表实现的队列称为链式队列。 2.1 顺序队列 …

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部