返回顶部
首页 > 资讯 > 精选 >Java实现单链表增删改查的操作方法
  • 693
分享到

Java实现单链表增删改查的操作方法

2023-06-14 12:06:30 693人浏览 泡泡鱼
摘要

这篇文章主要介绍了Java实现单链表增删改查的操作方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、新建学生节点类Stu_node节点包含:学号:int num;姓名:S

这篇文章主要介绍了Java实现单链表增删改查的操作方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、新建学生节点类

Stu_node节点包含:

学号:int num;

姓名:String name;

性别:String gender;

下一个节点:Stu_Node next;

为了便于打印节点内容需要重写toString方法

class Stu_Node{    int num;    String name;    String gender;    Stu_Node next;    @Override    public String toString() {        return "Stu_Node{" +                "num=" + num +                ", name='" + name + '\'' +                ", gender='" + gender + '\'' +                '}';    }    public Stu_Node(int num, String name, String gender){        this.num=num;        this.name=name;        this.gender=gender;    }}

二、新建一个操作链表的类,实现增删改查方法

1>创建链表的实现类对象

class SingleLinkedList{}

2>在类里实现尾结点添加链表节点方法

定义一个头结点head为空。

定义一个节点变量temp等于头结点head。

遍历链表找到尾结点。

while循环,结束的标志是temp的下一个节点为空,此时终止while(否则程序会陷入死循环),循环每进行一次要把temp节点的下一个节点赋值给temp变量(否则程序会陷入死循环)。

使temp节点的下一个节点指向新增的节点。

class SingleLinkedList{    Stu_Node head = new Stu_Node(0,"null","null");    //链表的尾节点添加方法    public void add(Stu_Node node){        Stu_Node temp = head;        while(true){            if (temp.next==null){                break;            }            temp = temp.next;        }        temp.next=node;    }    }

按学号顺序插入节点

新建临时节点temp

新建boolean变量flag用于找到当前带插入节点的位置

while循环遍历链表找到插入节点位置,如果temp的下一节点为空表示链表已经遍历完毕此时终止循环;如果temp的下一节点的学号等于要插入的节点学号,此时将flag变量赋值为true结束循环(带插入的节点已经存在插入失败);如果temp节点的下一节点的学号大于带插入节点的学号,此时temp下一节点指向的位置就是要插入的位置。每次链表遍历一次节点要将temp的下一节点赋值给temp节点避免死循环。

如果flag为真表示,要插入的节点已经存在,输出插入失败;如果flag为假,令插入节点的下一节点指向temp的下一节点,temp节点的下一节点指向带插入节点。(画图方便理解,图自行脑补)

public void addOrder(Stu_Node node){        Stu_Node temp = head;        boolean flag = false;        while(true){            if (temp.next==null)                break;            if (temp.next.num >node.num){                break;            }            else if (temp.next.num==node.num){                flag = true;                break;            }            temp=temp.next;        }        if (flag){            System.out.println("插入失败");        }        else{            node.next=temp.next;            temp.next=node;        }    }

3>打印链表

判断头结点的下一个节点是否为空,如果为空输出链表为空。

定义一个temp节点变量,将头结点的指向的节点赋值给temp。

遍历链表打印节点数据。

while循环,打印链表节点,每打印一次temp节点,使temp节点的下一节点赋值给temp避免程序陷入死循环,循环结束标志是temp的节点为空(因为temp节点是头结点head的下一节点)。

class SingleLinkedList{    Stu_Node head = new Stu_Node(0,"null","null");    //打印单链表    public void print(){        if (head.next==null){            System.out.println("链表为空");        }        Stu_Node temp = head.next;        while(true){            if (temp==null){                break;            }            System.out.println(temp);            temp=temp.next;        }    }}

4>修改链表中的数据(假设学号为维一值)

首先判断链表是否为空

定义一个临时变量temp将头结点赋值给temp

定义一个Boolean变量flag用于判断链表中是否存在要修改的节点。

遍历链表,while循环查询要修改的节点,每查询一次就将temp变量赋值为temp的next节点,如果查询到要修改的节点将flag变量赋值为真、终止while循环,如果temp的下一节点为空表示未找到要修改的节点变量,此时也终止循环。

判断flag值为真代表找到当前要修改的节点,将要新的节点的值赋值给要修改节点的值;如果flag为假表示未找到当前节点。

class SingleLinkedList{    Stu_Node head = new Stu_Node(0,"null","null");    //链表的修改方法    public void update(Stu_Node newnode){        if (head.next==null){            System.out.println("链表为空");        }        Stu_Node temp = head;        boolean flag = false;        while (true){            if (temp.next==null){                break;            }            if (temp.num== newnode.num){                flag = true;                break;            }            temp=temp.next;        }        if (flag){            temp.name=newnode.name;            temp.gender= newnode.gender;        }        else            System.out.println("当前节点不存在,无法修改!");    }}

5>依据学号删除节点

定义一个临时节点temp,将头结点赋值给temp

定义一个boolean型变量flag用于判断是否找到当前链表中待删除的节点

while循环遍历当前链表,每遍历一次节点,将temp节点的下一节点赋值给temp避免循环,如果待删除节点的学号跟要删除的节点的学号一至,将flag赋值为true终止while循环,否则持续遍历链表直到temp节点的下一节点为空终止循环。

如果flag为真,代表找到当前要删除的节点,将temp的下一节点指向temp下一节点的下一节点。,如果flag为假代表找不到待删除的节点。

class SingleLinkedList{    Stu_Node head = new Stu_Node(0,"null","null");    //删除链表的节点    public void delete(int no){        Stu_Node temp = head;        boolean flag = false;        while(true){            if (temp.next==null)                break;            if (temp.next.num==no){                flag=true;                break;            }            temp = temp.next;        }        if (flag){            temp.next=temp.next.next;        }        else{            System.out.println("未找到要删除的链表");        }    }}

三、新建操作链表类的实现类实现其增删改查功能

新建操作链表类的实现类对象

新建多个待操作的节点

使用新建的链表操作类对象进行增删改查功能

完整代码如下:

public class linkedlist {    public static void main(String[] args) {        SingleLinkedList list = new SingleLinkedList();        Stu_Node node1 = new Stu_Node(1903210086,"小明","男");        Stu_Node node2 = new Stu_Node(1903210087,"小花","女");        Stu_Node node3 = new Stu_Node(1903210088,"小黄","男");        Stu_Node node4 = new Stu_Node(1903210089,"小翠","女");        list.add(node1);        list.add(node4);        list.add(node3);        list.add(node2);        list.print();        System.out.println("----------------------");        System.out.println("按学号顺序插入节点");        SingleLinkedList list_1= new SingleLinkedList();        list_1.addOrder(node1);        list_1.addOrder(node4);        list_1.addOrder(node3);        list_1.addOrder(node2);        list_1.print();        System.out.println("-----------------------");        Stu_Node node5 = new Stu_Node(1903210089,"贾明","男");        list.update(node5);        list.print();        System.out.println("#######################");        System.out.println("删除之后的链表");        list.delete(1903210088);        list.print();    }}class Stu_Node{    int num;    String name;    String gender;    Stu_Node next;    @Override    public String toString() {        return "Stu_Node{" +                "num=" + num +                ", name='" + name + '\'' +                ", gender='" + gender + '\'' +                '}';    }    public Stu_Node(int num, String name, String gender){        this.num=num;        this.name=name;        this.gender=gender;    }}class SingleLinkedList{    Stu_Node head = new Stu_Node(0,"null","null");    //链表的尾节点添加方法    public void add(Stu_Node node){        Stu_Node temp = head;        while(true){            if (temp.next==null){                break;            }            temp = temp.next;        }        temp.next=node;    }    public void addOrder(Stu_Node node){        Stu_Node temp = head;        boolean flag = false;        while(true){            if (temp.next==null)                break;            if (temp.next.num >node.num){                break;            }            else if (temp.next.num==node.num){                flag = true;                break;            }            temp=temp.next;        }        if (flag){            System.out.println("插入失败");        }        else{            node.next=temp.next;            temp.next=node;        }    }    public void print(){        if (head.next==null){            System.out.println("链表为空");        }        Stu_Node temp = head.next;        while(true){            if (temp==null){                break;            }            System.out.println(temp);            temp=temp.next;        }    }    public void update(Stu_Node newnode){        if (head.next==null){            System.out.println("链表为空");        }        Stu_Node temp = head;        boolean flag = false;        while (true){            if (temp.next==null){                break;            }            if (temp.num== newnode.num){                flag = true;                break;            }            temp=temp.next;        }        if (flag){            temp.name=newnode.name;            temp.gender= newnode.gender;        }        else            System.out.println("当前节点不存在,无法修改!");    }    public void delete(int no){        Stu_Node temp = head;        boolean flag = false;        while(true){            if (temp.next==null)                break;            if (temp.next.num==no){                flag=true;                break;            }            temp = temp.next;        }        if (flag){            temp.next=temp.next.next;        }        else{            System.out.println("未找到要删除的链表");        }    }}

感谢你能够认真阅读完这篇文章,希望小编分享的“Java实现单链表增删改查的操作方法”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: Java实现单链表增删改查的操作方法

本文链接: https://lsjlt.com/news/270620.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java实现单链表增删改查的操作方法
    这篇文章主要介绍了Java实现单链表增删改查的操作方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、新建学生节点类Stu_Node节点包含:学号:int num;姓名:S...
    99+
    2023-06-14
  • Java如何实现单链表的增删改查
    一、新建学生节点类 Stu_Node节点包含: 学号:int num; 姓名:String name; 性别:String gender; 下一个节点:Stu_Node next;...
    99+
    2024-04-02
  • java实现单链表中的增删改
    本文实例为大家分享了java实现单链表中增删改的具体代码,供大家参考,具体内容如下 什么是链表 链表是有序的列表,但是它在内存中是存储如下 小结: 链表是以节点的方式来存储,是链式...
    99+
    2024-04-02
  • 如何实现java链表中的基本操作(增、删、查、改)
    链表也是一个线性的数据结构,与数组不同的是,链表在内存中的存储方式是随机存储。下面给出涵盖链表四个操作的一个完整的例子,有几点需要注意的是:(一)在增删改查之前,都需要对给出的下标进行边界判断;(二)增加一个名为last的节点,可以方便在链...
    99+
    2020-02-26
    java教程 实现 java 链表
  • C语言中如何实现单向链表的增删查改操作
    这篇文章主要介绍了C语言中如何实现单向链表的增删查改操作,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言链表是线性表的链式存储结构,它可以以O(1)的时间复杂度进行插入或者...
    99+
    2023-06-25
  • SpringBoot整合TKMyBatis实现单表增删改查操作
    目录什么是TKMybatisSpringBoot整合TKMybatis实体类注解TKMapper接口如何使用基本增删改操作批量查询和删除批量添加自定义查询条件ExampleExamp...
    99+
    2023-01-03
    SpringBoot整合TKMyBatis增删改查 SpringBoot增删改查
  • C语言数据结构之单链表与双链表的增删改查操作实现
    目录前言单链表的增删改查定义结构体以及初始化增加结点删除结点查找修改结点移除结点最终效果双链表的基本操作初始化建表遍历双链表指定位置插入结点指定位置删除结点查找结点位置最终效果结语前...
    99+
    2024-04-02
  • C++双向链表的增删查改操作方法源码分析
    这篇“C++双向链表的增删查改操作方法源码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++双向链表的增删查改操作方法...
    99+
    2023-07-05
  • nodeJs链接Mysql做增删改查的简单操作
    nodejs连接MySQL,首先安装了mysql之后,在cmd界面安装nodeJs的mysql模块: npm install mysql mysql中创建数据库“nodetry1”,再创建表tab...
    99+
    2022-06-04
    操作 简单 链接
  • Java双向链表的增删改查怎么实现
    这篇文章主要介绍“Java双向链表的增删改查怎么实现”,在日常操作中,相信很多人在Java双向链表的增删改查怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java双向链表的增删改查怎么实现”的疑惑有所...
    99+
    2023-07-02
  • Java实现单链表SingleLinkedList增删改查及反转 逆序等
    节点类 可以根据需要,对节点属性进行修改。注意重写toString()方法,以便后续的输出操作。 //节点类 class Node { public int id; ...
    99+
    2024-04-02
  • 使用Java怎么对链表进行增删查改操作
    本篇文章为大家展示了使用Java怎么对链表进行增删查改操作,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、链表的概念和结构1.1 链表的概念简单来说链表是物理上不一定连续,但是逻辑上一定连续的一种...
    99+
    2023-06-15
  • MySQL表的操作『增删改查』
    ✨个人主页: 北 海 🎉所属专栏: MySQL 学习 🎃操作环境: CentOS 7.6 阿里云远程服务器 🎁软件版本: MySQL 5.7.44 文章目录 1.创建表1.1...
    99+
    2023-12-22
    mysql 数据库
  • java简单实现数组的增删改查方法
    目录1.一维数组​2.数组的扩容3.数组的复制1.直接将数组赋值给新数组2.创建一个新的数组,再将原数组的数据逐个赋值4.数组的删除5.数组的排序6.数组的查找1.顺序查...
    99+
    2024-04-02
  • C语言中单链表的基本操作指南(增删改查)
    目录1.链表概述2.链表的基本使用2.0 准备工作2.1 创建节点(结构体)2.2 全局定义链表头尾指针 方便调用2.3 创建链表,实现在链表中增加一个数据(尾添加)————增2.4...
    99+
    2024-04-02
  • java实现双向链表的增删改
    双向链表:java实现双向链表的增删改,供大家参考,具体内容如下 单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找 单向链表不能自我删除,需要靠辅助节点,而双向链表...
    99+
    2024-04-02
  • 【数据结构】—— 单链表的增删改查
    ❤️一名热爱Java的大一学生,希望与各位大佬共同学习进步❤️ 🧑个人主页:@周小末天天开心 各位大佬的点赞👍 收藏⭐ 关注✅,是本人学习的最大动力 感谢! 📕该篇文章收录专栏—...
    99+
    2023-09-04
    java 开发语言 数据结构
  • Java实现单链表的操作
    本文实例为大家分享了Java实现单链表的基本操作,供大家参考,具体内容如下 顺序表:物理上逻辑上都连续;链表:物理上不一定连续,逻辑上一定连续的。 链表的概念及结构 概念:连表示一种...
    99+
    2024-04-02
  • Java单链表的增删改查与面试题详解
    目录一、单链表的增删改查1、创建结点2、单链表的添加操作3、单链表的删除操作4、单链表的有效结点的个数二、大厂面试题一、单链表的增删改查 1、创建结点 单链表是由结点连接而成,所以...
    99+
    2024-04-02
  • java中如何实现JDBC增删改查操作
    小编给大家分享一下java中如何实现JDBC增删改查操作,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!     我们先看一遍步骤:    这里不推荐使用...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作