广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java如何实现单链表的增删改查
  • 562
分享到

Java如何实现单链表的增删改查

2024-04-02 19:04:59 562人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

一、新建学生节点类 Stu_node节点包含: 学号:int num; 姓名:String name; 性别:String gender; 下一个节点:Stu_Node next;

一、新建学生节点类

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>在类里实现尾结点添加链表节点方法

1、定义一个头结点head为空。

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

3、遍历链表找到尾结点。

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

4、使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;
    }
    
}

按学号顺序插入节点

1、新建临时节点temp

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

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

4、如果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>打印链表

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

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

3、遍历链表打印节点数据。

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>修改链表中的数据(假设学号为维一值)

1、首先判断链表是否为空

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

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

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

5、判断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>依据学号删除节点

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

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

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

4、如果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("未找到要删除的链表");
        }

    }
}

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

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

2、新建多个待操作的节点

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

完整代码如下:


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如何实现单链表增删改查的文章就介绍到这了,更多相关Java单链增删改查内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java如何实现单链表的增删改查

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java如何实现单链表的增删改查
    一、新建学生节点类 Stu_Node节点包含: 学号:int num; 姓名:String name; 性别:String gender; 下一个节点:Stu_Node next;...
    99+
    2022-11-12
  • java实现单链表中的增删改
    本文实例为大家分享了java实现单链表中增删改的具体代码,供大家参考,具体内容如下 什么是链表 链表是有序的列表,但是它在内存中是存储如下 小结: 链表是以节点的方式来存储,是链式...
    99+
    2022-11-13
  • Java实现单链表增删改查的操作方法
    这篇文章主要介绍了Java实现单链表增删改查的操作方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、新建学生节点类Stu_Node节点包含:学号:int num;姓名:S...
    99+
    2023-06-14
  • Java双向链表的增删改查怎么实现
    这篇文章主要介绍“Java双向链表的增删改查怎么实现”,在日常操作中,相信很多人在Java双向链表的增删改查怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java双向链表的增删改查怎么实现”的疑惑有所...
    99+
    2023-07-02
  • Java实现单链表SingleLinkedList增删改查及反转 逆序等
    节点类 可以根据需要,对节点属性进行修改。注意重写toString()方法,以便后续的输出操作。 //节点类 class Node { public int id; ...
    99+
    2022-11-12
  • java如何实现双向链表的增删改
    这篇文章主要介绍“java如何实现双向链表的增删改”,在日常操作中,相信很多人在java如何实现双向链表的增删改问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java如何实现双向链表的增删改”的疑惑有所帮助!...
    99+
    2023-06-30
  • 如何实现java链表中的基本操作(增、删、查、改)
    链表也是一个线性的数据结构,与数组不同的是,链表在内存中的存储方式是随机存储。下面给出涵盖链表四个操作的一个完整的例子,有几点需要注意的是:(一)在增删改查之前,都需要对给出的下标进行边界判断;(二)增加一个名为last的节点,可以方便在链...
    99+
    2020-02-26
    java教程 实现 java 链表
  • 【数据结构】—— 单链表的增删改查
    ❤️一名热爱Java的大一学生,希望与各位大佬共同学习进步❤️ 🧑个人主页:@周小末天天开心 各位大佬的点赞👍 收藏⭐ 关注✅,是本人学习的最大动力 感谢! 📕该篇文章收录专栏—...
    99+
    2023-09-04
    java 开发语言 数据结构
  • Java单链表的增删改查与面试题详解
    目录一、单链表的增删改查1、创建结点2、单链表的添加操作3、单链表的删除操作4、单链表的有效结点的个数二、大厂面试题一、单链表的增删改查 1、创建结点 单链表是由结点连接而成,所以...
    99+
    2022-11-13
  • java实现双向链表的增删改
    双向链表:java实现双向链表的增删改,供大家参考,具体内容如下 单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找 单向链表不能自我删除,需要靠辅助节点,而双向链表...
    99+
    2022-11-13
  • C语言中如何实现单向链表的增删查改操作
    这篇文章主要介绍了C语言中如何实现单向链表的增删查改操作,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言链表是线性表的链式存储结构,它可以以O(1)的时间复杂度进行插入或者...
    99+
    2023-06-25
  • MyBatis 单表的增删改查
    ✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:...
    99+
    2023-08-17
    mybatis java mysql
  • C语言数据结构之单链表与双链表的增删改查操作实现
    目录前言单链表的增删改查定义结构体以及初始化增加结点删除结点查找修改结点移除结点最终效果双链表的基本操作初始化建表遍历双链表指定位置插入结点指定位置删除结点查找结点位置最终效果结语前...
    99+
    2022-11-13
  • Java如何实现顺序表的增删查改功能
    这篇文章主要介绍Java如何实现顺序表的增删查改功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!创建顺序表在java语言中要实现顺序表,首先创建一个类,因为顺序表本身就像数组,所以我们这里定义一个int类型的数组和...
    99+
    2023-06-14
  • Java实现顺序表的增删查改功能
    创建顺序表 在java语言中要实现顺序表,首先创建一个类,因为顺序表本身就像数组,所以我们这里定义一个int类型的数组和usedata为有效数据,构造方法里先申请可以存放10个数据的...
    99+
    2022-11-12
  • C语言 单向链表的增删查改快速掌握
    目录前言一、创建二、单向链表的函数声明三、函数实现1.创建节点2.尾插节点3.头插4.尾删5.头删6.查找节点7.修改总结前言 链表是线性表的链式存储结构,它可以以O(1)的时间复杂...
    99+
    2022-11-12
  • Java数据结构之链表的增删查改详解
    目录一、链表的概念和结构1.1 链表的概念1.2 链表的分类二、单向不带头非循环链表2.1 创建节点类型2.2 头插法2.3 尾插法2.4 获取链表长度2.5 任意位置插入2.6 查...
    99+
    2022-11-12
  • java简单实现数组的增删改查方法
    目录1.一维数组​2.数组的扩容3.数组的复制1.直接将数组赋值给新数组2.创建一个新的数组,再将原数组的数据逐个赋值4.数组的删除5.数组的排序6.数组的查找1.顺序查...
    99+
    2022-11-12
  • SpringBoot整合TKMyBatis实现单表增删改查操作
    目录什么是TKMybatisSpringBoot整合TKMybatis实体类注解TKMapper接口如何使用基本增删改操作批量查询和删除批量添加自定义查询条件ExampleExamp...
    99+
    2023-01-03
    SpringBoot整合TKMyBatis增删改查 SpringBoot增删改查
  • vue.js+Element如何实现表格里的增删改查
    这篇文章主要介绍了vue.js+Element如何实现表格里的增删改查,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。新项目使用的是vue.j...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作