返回顶部
首页 > 资讯 > 后端开发 > Python >Java单链表的增删改查与面试题详解
  • 329
分享到

Java单链表的增删改查与面试题详解

2024-04-02 19:04:59 329人浏览 薄情痞子

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

摘要

目录一、单链表的增删改查1、创建结点2、单链表的添加操作3、单链表的删除操作4、单链表的有效结点的个数二、大厂面试题一、单链表的增删改查 1、创建结点 单链表是由结点连接而成,所以

一、单链表的增删改查

1、创建结点

单链表是由结点连接而成,所以我们首先要创建结点类,用于对结点进行操作。定义data属性 表示序号,定义name属性表示结点存放的数据信息,定义next属性表示指向下一个结点。构造器只需要放入data属性和name属性,重写toString方法方便打印结点信息。

public class node {
    public int data;
    public String name;
    public Node next;
    public Node(int data, String name){
        this.data = data;
        this.name = name;
    }
    @Override
    public String toString() {
        return "Node{" +
                "data=" + data +
                ", name='" + name + '\'' +
                '}';
    }
}

2、单链表的添加操作

首先创建头结点

此结点表示链表的头,不存放实际数据的。

private Node head = new Node(0,"");

添加操作

将新的结点添加到链表的尾部,我们首先要遍历链表,找到链表的尾部,然后将最后一个结点的next指向新的结点,新结点的next指向NULL,这样就完成了链表的添加操作,这种每次添加到链表的尾部的操作称为尾插法。注意,当我们遍历链表时,需要一个辅助结点temp来进行遍历,因为head头结点不能动。

public class SingleLinkedList {
    //首先创建头结点,此结点表示链表的头,无具体数据
    private Node head = new Node(0,"");
    //添加结点操作
    public void aDDData(Node node){
        Node temp = head;
        while (true){
            if (temp.next == null){
                temp.next = node;
                node.next = null;
                break;
            }
            temp = temp.next;
        }
    }
}

3、单链表的删除操作

假设我们要删除中间这个结点,我们只需要将这个结点的上一个结点的next指向这个结点的下一个结点(也就是将第一个结点的next指向第三个结点)。

     public void delData(Node node){
        Node temp = head;
        while (true){
            //如果是要删除的结点
            if (temp.next.data == node.data){
                temp.next = temp.next.next;
                break;
            }else if(temp.next == null){
                System.out.println("未找到结点!");
                break;
            }
            temp = temp.next;
        }
    }

4、单链表的有效结点的个数

我们可以定义一个计数的变量count,初始化为0,然后循环遍历链表,每遍历到一个结点,count就加一,这样就能求出单链表的有效个数。

    public int countData(){
        Node temp = head.next;
        int count = 0;
        while (true){
            if (temp == null){
                break;
            }
            count++;
            temp = temp.next;
        }
        return count;
    }

二、大厂面试

1、新浪微博:查找单链表中倒数第k个结点

从上图可以看出,假设要找倒数第2个结点,我们该怎么做?不难看出,倒数第二个结点也是顺序的第三个结点,也就是将倒数的结点转换成顺序结点,遍历链表找到顺序结点即可。因为是有明确表示是第几个结点,所以我们需要知道结点的有效个数,前面我们介绍了有效个数的求法,直接用即可。当我们要找倒数第k个结点,我们可以转换成顺序的第(count - k + 1)个结点。比如:k = 2,count = 4, 倒数第2个结点也就是顺序第(4 - 2 + 1 = 3)个结点。

    public Node referNode(int n){
        //根据前面计算有效个数的方法,求得链表总结点个数
        int max = countData();
        //计数
        int count = 1;
        //判断指定的结点是否在范围内
        if (!(n >= 1 && n <= max)){
            throw new RuntimeException("没有此结点!");
        }
        //辅助结点
        Node temp = head.next;
        //循环遍历查找
        while (true){
            //满足条件,则是我们要找的结点
            if (count == (max - n + 1)){
                return temp;
            }else {
                temp = temp.next;
                count++;
            }
        }
    }

2、腾讯面试题:单链表的反转

首先创建辅助变量temp用于循环原来的链表,辅助变量temp1记录temp的下一个位置,每遍历到一个结点就插入到新链表的头部,这种方式称为头插法。

public void nodeReversal(Node head){
        //如果链表为空或链表只有一个结点,则不需要反转
        if (head.next == null || head.next.next == null){
            return;
        }
        //辅助变量temp
        Node temp = head.next;
        //辅助变量temp1
        Node temp1 = null;
        //循环遍历
        while (true){
            //退出循环的条件
            if (temp == null){
                break;
            }
            //首先将temp的下一个结点给temp1
            temp1 = temp.next;
            //然后将temp的next指向新链表头headReversal的next(头指向的下一个)
            temp.next = headReversal.next;
            //再然后将新链表头headReversal的next指向temp结点
            headReversal.next = temp;
            //最后将temp1记录的结点赋值给temp
            temp = temp1;
        }
        //遍历结束,将新的顺序替换原来的顺序
        head.next = headReversal.next;
        //显示链表,这个方法需要自己写
        showList(head);
}

到此这篇关于Java单链表的增删改查与面试题详解的文章就介绍到这了,更多相关Java单链表增删改查内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java单链表的增删改查与面试题详解

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

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

猜你喜欢
  • Java单链表的增删改查与面试题详解
    目录一、单链表的增删改查1、创建结点2、单链表的添加操作3、单链表的删除操作4、单链表的有效结点的个数二、大厂面试题一、单链表的增删改查 1、创建结点 单链表是由结点连接而成,所以...
    99+
    2024-04-02
  • Java如何实现单链表的增删改查
    一、新建学生节点类 Stu_Node节点包含: 学号:int num; 姓名:String name; 性别:String gender; 下一个节点:Stu_Node next;...
    99+
    2024-04-02
  • Java数据结构之链表的增删查改详解
    目录一、链表的概念和结构1.1 链表的概念1.2 链表的分类二、单向不带头非循环链表2.1 创建节点类型2.2 头插法2.3 尾插法2.4 获取链表长度2.5 任意位置插入2.6 查...
    99+
    2024-04-02
  • java实现单链表中的增删改
    本文实例为大家分享了java实现单链表中增删改的具体代码,供大家参考,具体内容如下 什么是链表 链表是有序的列表,但是它在内存中是存储如下 小结: 链表是以节点的方式来存储,是链式...
    99+
    2024-04-02
  • 【数据结构】—— 单链表的增删改查
    ❤️一名热爱Java的大一学生,希望与各位大佬共同学习进步❤️ 🧑个人主页:@周小末天天开心 各位大佬的点赞👍 收藏⭐ 关注✅,是本人学习的最大动力 感谢! 📕该篇文章收录专栏—...
    99+
    2023-09-04
    java 开发语言 数据结构
  • Java实现单链表增删改查的操作方法
    这篇文章主要介绍了Java实现单链表增删改查的操作方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、新建学生节点类Stu_Node节点包含:学号:int num;姓名:S...
    99+
    2023-06-14
  • MyBatis 单表的增删改查
    ✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:...
    99+
    2023-08-17
    mybatis java mysql
  • Java实现单链表SingleLinkedList增删改查及反转 逆序等
    节点类 可以根据需要,对节点属性进行修改。注意重写toString()方法,以便后续的输出操作。 //节点类 class Node { public int id; ...
    99+
    2024-04-02
  • Java双向链表的增删改查怎么实现
    这篇文章主要介绍“Java双向链表的增删改查怎么实现”,在日常操作中,相信很多人在Java双向链表的增删改查怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java双向链表的增删改查怎么实现”的疑惑有所...
    99+
    2023-07-02
  • C语言数据结构之单链表与双链表的增删改查操作实现
    目录前言单链表的增删改查定义结构体以及初始化增加结点删除结点查找修改结点移除结点最终效果双链表的基本操作初始化建表遍历双链表指定位置插入结点指定位置删除结点查找结点位置最终效果结语前...
    99+
    2024-04-02
  • MySQL 详细单表增删改查crud语句
    MySQL 增删改查语句 1.创建练习表 这里练习表没有满足三范式 第一范式(又称 1NF):保证每列的原子性 数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性。满足第一范式是关...
    99+
    2022-05-16
    MySQL crud语句 MySQL单表增删改查
  • MySQL增删查改数据表详解
    目录前言一、新增数据二、查询数据全列查询指定列查询表达式查询指定别名查询去重查询排序查询条件查询分页查询三、修改数据四、删除数据前言 CRUD代表: 增加(create) ,查询(retrieve) ,更新(updat&...
    99+
    2022-11-19
    MySQL增删查改 MySQL数据库操作
  • C语言 单向链表的增删查改快速掌握
    目录前言一、创建二、单向链表的函数声明三、函数实现1.创建节点2.尾插节点3.头插4.尾删5.头删6.查找节点7.修改总结前言 链表是线性表的链式存储结构,它可以以O(1)的时间复杂...
    99+
    2024-04-02
  • java实现双向链表的增删改
    双向链表:java实现双向链表的增删改,供大家参考,具体内容如下 单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找 单向链表不能自我删除,需要靠辅助节点,而双向链表...
    99+
    2024-04-02
  • MyBatis增、删、改、查(多表查询)操作详解
    MyBatis增、删、改、查操作 1. 增加用户操作(insert标签),返回受影响的行数.1.1 返回自增id 2. 修改用户操作(update)3. 删除用户操作(delete)4. ...
    99+
    2023-09-24
    mybatis mysql spring 数据库 spring boot
  • java中JDBC增删改查操作详解
    目录前言一、增删改操作1.1 PreparedStatement介绍 1.2 增删改操作  1.3 测试二、查操作2.1 通用对不同表进行一条数据查询操作2.2 通用对不同表进行多条...
    99+
    2024-04-02
  • Java数据结构之单链表的实现与面试题汇总
    目录1 单链表1.1 单链表介绍1.2 单链表的实现思路分析1.3 实现代码2 单链表的面试题2.1 统计单链表中有效节点数量2.2 新浪–倒数第k个节点2.3 腾讯&n...
    99+
    2022-11-13
    Java 数据结构 单链表 Java 单链表
  • C语言中单链表的基本操作指南(增删改查)
    目录1.链表概述2.链表的基本使用2.0 准备工作2.1 创建节点(结构体)2.2 全局定义链表头尾指针 方便调用2.3 创建链表,实现在链表中增加一个数据(尾添加)————增2.4...
    99+
    2024-04-02
  • 如何实现java链表中的基本操作(增、删、查、改)
    链表也是一个线性的数据结构,与数组不同的是,链表在内存中的存储方式是随机存储。下面给出涵盖链表四个操作的一个完整的例子,有几点需要注意的是:(一)在增删改查之前,都需要对给出的下标进行边界判断;(二)增加一个名为last的节点,可以方便在链...
    99+
    2020-02-26
    java教程 实现 java 链表
  • nodeJs链接Mysql做增删改查的简单操作
    nodejs连接MySQL,首先安装了mysql之后,在cmd界面安装nodeJs的mysql模块: npm install mysql mysql中创建数据库“nodetry1”,再创建表tab...
    99+
    2022-06-04
    操作 简单 链接
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作