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数据结构之复杂度篇》是一篇关于算法复杂度分析的文章。本文主要介绍了如何使用大O符号来表示算法的时间复杂度、如何计算最坏情况下的时间复杂度、如何判断嵌套循环的时间复杂度、如何分析递归算法的时间复杂度等。 大O符号 大O符号是一种表示算法时间复杂度的符号,通常用于表示最坏情况下的时间复杂度。例如,如果某个算法的时间复杂度为O(n),则表示最坏情况下这个…

    数据结构 2023年5月17日
    00
  • C语言数据结构深入探索顺序表

    C语言数据结构深入探索顺序表攻略 一、概述 顺序表是一种线性结构,是计算机程序中最常见的数据结构之一。在C语言中,顺序表可以用数组来实现。本篇文章将深入讲解顺序表的原理和实现方法,帮助读者加深对顺序表的理解,并掌握如何用C语言代码实现顺序表。 二、顺序表的定义和特点 顺序表是指用一组地址连续的存储单元依次存储线性表中的各个元素,用于表示具有相同数据类型的n个…

    数据结构 2023年5月17日
    00
  • Java 数据结构线性表之顺序存储详解原理

    Java 数据结构线性表之顺序存储详解原理 一、什么是线性表 线性表(Linear List)指的是同一类数据元素的集合,而且这些元素之间是有序的。线性表具有两个显著的特点:第一,有且仅有一个被称为“第一个”的数据元素;第二,有且仅有一个被称为“最后一个”的数据元素;此外,除第一个和最后一个数据元素外,其它数据元素均有且仅有一个直接前驱和一个直接后继。 二、…

    数据结构 2023年5月17日
    00
  • Python数据结构之顺序表的实现代码示例

    针对“Python数据结构之顺序表的实现代码示例”,我可以给出以下完整攻略: 什么是顺序表 顺序表是一种线性结构,是用一维数组来存储数据元素的有序集合。它支持随机访问,可以对任意位置的元素进行查找、插入、删除等操作。 顺序表的实现代码示例 以下是Python中实现顺序表的示例代码,以及相关的操作函数,包括创建空表、获取表长度、查找元素、插入元素、删除元素等。…

    数据结构 2023年5月17日
    00
  • JavaScript 数据结构之集合创建(1)

    当我们在编写JavaScript程序时,有时需要使用数据结构来组织和表示数据。其中之一是集合,它是一组无序且唯一的项的集合。这里就介绍如何在JavaScript中创建集合。 1. 集合定义 集合是一种不同于数组或对象,由一组彼此无关的元素组成的数据结构。集合中的元素是唯一的,即不允许重复元素。 2. 集合的操作 JavaScript中的集合可以支持以下常见操…

    数据结构 2023年5月17日
    00
  • C++数据结构哈希表详解

    C++数据结构哈希表详解 哈希表(Hash Table)是一种非常重要的数据结构,用于实现字典等各种应用。哈希表将关键字映射到一个固定大小的数据集合中,以支持常数时间复杂度的插入、查找和删除操作。哈希表的核心思想是将关键字通过哈希函数(Hash Function)映射到数据集合中的一个索引位置,哈希函数需要满足良好的散列性质,使得关键字能够均匀地散布在数据集…

    数据结构 2023年5月17日
    00
  • C语言结构体详细图解分析

    针对C语言结构体详细图解分析的攻略,我来详细讲解一下。 一、什么是结构体? 结构体是C语言中一种自定义数据结构类型,是将不同类型的变量组合在一起的方式,形成了新的数据类型。结构体成员可以是任意类型的数据,包括基本类型、数组、指针、函数等,可以理解为一个包含多个变量的大变量。 二、结构体的定义和使用 定义结构体的方式为: struct name { type1…

    数据结构 2023年5月17日
    00
  • Java数据结构之最小堆和最大堆的原理及实现详解

    Java数据结构之最小堆和最大堆的原理及实现详解 什么是堆? 堆是一种特殊的树形数据结构,它满足以下两个条件: 堆是一个完全二叉树,即除了最后一层,其他层都必须填满,最后一层从左到右填满 堆中每个节点的值必须满足某种特定的条件,例如最小堆要求每个节点的值都小于等于其子节点的值。 堆一般分为两种类型:最小堆和最大堆。 最小堆:每个节点的值都小于等于其子节点的值…

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