Java实现带头结点的单链表

下面我会详细讲解Java实现带头结点的单链表的完整攻略。整个过程分为以下几个步骤:

1. 定义单链表节点类

首先,我们需要定义一个节点类来表示单链表的节点。节点类需要包含以下两个属性:

  • 数据域:用来存储节点中的数据。
  • 指针域:指向下一个节点的指针。

以下是节点类的定义示例:

public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

在这个示例中,我们使用了一个整型数值 val 来存储节点中的数据,并定义了一个指针 next 指向下一个节点。注意,这里我们使用的是类的构造函数来初始化节点的数值域。

2. 定义单链表类

接下来,我们需要定义一个单链表类来管理节点。单链表类需要包含以下几个方法:

  • 在链表尾部添加一个节点。
  • 在链表中插入一个节点。
  • 删除链表中的一个节点。
  • 遍历整个链表并打印所有节点的值。

以下是单链表类的定义示例:

public class LinkedList {
    private ListNode head;  // 头节点

    // 在链表尾部添加一个节点
    public void addNode(int val) {
        ListNode node = new ListNode(val);
        if (head == null) {
            head = node;
            return;
        }

        ListNode cur = head;
        while (cur.next != null) {
            cur = cur.next;
        }
        cur.next = node;
    }

    // 在链表中插入一个节点
    public void insertNode(int val, int index) {
        ListNode node = new ListNode(val);
        ListNode cur = head;
        int i = 0;
        while (cur != null && i < index) {
            cur = cur.next;
            i++;
        }
        if (cur == null) {
            return;
        }
        node.next = cur.next;
        cur.next = node;
    }

    // 删除链表中的一个节点
    public void deleteNode(int val) {
        ListNode cur = head;
        ListNode prev = null;
        while (cur != null && cur.val != val) {
            prev = cur;
            cur = cur.next;
        }
        if (cur == null) {
            return;
        }
        if (prev == null) {
            head = cur.next;
        } else {
            prev.next = cur.next;
        }
    }

    // 遍历整个链表并打印所有节点的值
    public void printList() {
        ListNode cur = head;
        while (cur != null) {
            System.out.print(cur.val + " ");
            cur = cur.next;
        }
        System.out.println();
    }
}

我们可以看到,在这个示例中,我们定义了一个私有的头节点 head ,并对应实现了上述四个函数方法。

3. 使用单链表

最后,我们可以使用上面定义的单链表类来实现一些基本操作。例如,我们可以创建一个新的链表对象,并向其中添加一个节点,然后遍历整个链表打印所有节点的值。

以下是一个使用示例:

public class TestLinkedList {
    public static void main(String[] args) {
        LinkedList list = new LinkedList();
        list.addNode(1);
        list.addNode(2);
        list.addNode(3);
        list.addNode(4);

        list.insertNode(5, 2);

        list.deleteNode(3);

        list.printList();
    }
}

在这个示例中,我们创建了一个空链表,并向其中依次添加了四个节点。然后,我们调用 insertNode 方法在第三个节点后面添加了一个新节点 5。接着,我们调用 deleteNode 方法删除了值为 3 的节点。最后,我们调用 printList 方法遍历整个链表并打印所有节点的值,输出结果如下:

1 2 5 4

类似地,我们可以使用单链表类实现更多的操作,例如在链表头部添加一个节点、在链表中查找一个节点等等。

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

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

相关文章

  • 惠普笔记本键盘大写键和数字键一直闪烁怎么办?

    问题:惠普笔记本键盘大写键和数字键一直闪烁怎么办? 如果你的惠普笔记本键盘上的大写键和数字键一直在闪烁,可能是由于以下几个原因导致的:键盘设置问题、驱动程序问题或硬件故障。下面是一些解决该问题的步骤: 步骤 1:检查键盘设置 首先,确保你的键盘设置正确。按照以下步骤进行操作: 打开“控制面板”。 选择“时钟、语言和区域”。 点击“区域和语言”。 在弹出的窗口…

    other 2023年8月19日
    00
  • js实现拖拽效果(构造函数)

    下面是JS实现拖拽效果(构造函数)的完整攻略: 1. 定义构造函数 首先,我们需要定义一个构造函数来创建拖拽对象。可以使用function关键字和this关键字来实现: function Drag(element) { this.element = element; // 初始化一些值 } 在这个构造函数中,我们通过this.element来引用需要拖拽的元…

    other 2023年6月26日
    00
  • MySql如何将查询的出来的字段进行转换

    MySQL提供了多种函数,可以对查询出来的字段进行转换。下面是一些常用的转换函数及其使用方法: 1. CONCAT() CONCAT() 用于将多个字符串连接成一个字符串。语法: CONCAT(string1, string2, …, stringN) 示例: SELECT CONCAT(‘Hello’, ‘ ‘, ‘World’); 结果为: ‘Hel…

    other 2023年6月25日
    00
  • CAD怎么创建块和分解块?

    以下是在CAD软件中创建块和分解块的完整攻略: 创建块 打开CAD软件,并打开您要创建块的绘图文件。 选择要创建块的对象,可以是单个对象或多个对象。 在CAD软件的菜单栏中,找到“编辑”或“修改”等选项,点击打开下拉菜单。 在下拉菜单中,找到“创建块”或类似的选项,点击进入块创建界面。 在块创建界面中,输入块的名称,并根据需要设置其他属性,如插入点、旋转角度…

    other 2023年10月16日
    00
  • Android自定义View实现星星评分效果

    下面是详细讲解“Android自定义View实现星星评分效果”的完整攻略: 1. 确定需求 在开始编写自定义View之前,我们需要明确自己的需求。在本文中,需求是实现一个5颗星的评分效果,用户可以通过手指滑动及点击操作来进行打分,同时显示打分数值。 2. 建立项目 我们需要创建一个新的Android项目,打开Android Studio,点击File -&g…

    other 2023年6月25日
    00
  • 【C51】单片机定时器介绍

    【C51】单片机定时器介绍 简介 单片机定时器是单片机中非常重要的一个模块,其主要功能是提供定时、延时、计数等功能。在单片机应用中,经常会遇到需要定时、延时等的场景,如驱动液晶屏幕、超声波测距、蓝牙模块等。因此,学习单片机定时器对于程序员来说是非常必要和重要的。 C51定时器功能概述 C51单片机中有四个定时器,分别为:定时器0、定时器1、定时器2、定时器3…

    其他 2023年3月28日
    00
  • 使用Three.js制作一个3D奖牌页面

    下面是使用Three.js制作一个3D奖牌页面的完整攻略。 准备工作 在开始制作3D奖牌页面之前,需要进行一些准备工作。 安装Three.js 首先需要安装Three.js。可以从官网(https://threejs.org/)上下载最新版本并解压缩,或者在命令行下使用npm命令进行安装。 如果使用npm进行安装,可以在项目文件夹下执行以下命令: npm i…

    other 2023年6月20日
    00
  • 移动WEB像素相关知识

    移动WEB像素相关知识的完整攻略 移动WEB像素是指在移动设备上显示网页时,网页中的像素大小。由于移动设备的屏幕尺寸和像素密度不同,因此移动WEB像素的大小也会有所不同。本文将详细讲解移动WEB像素的相关知识,包括移动WEB像素的概念、计算方法和示例说明。 移动WEB像素的概念 移动WEB像素是指在移动设备上显示网页时,网页中的像素大小。在移动设备上,一个像…

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