Java-----链表

本篇碎碎念:唐朝诡事录中的西安与洛阳让我想到了,远赴人间惊鸿宴会,一睹人间盛世颜,描绘的就是这两个古都吧,有机会一定要去游览一番                    

今日份励志文案: 最好的状态就是向自己喜欢的东西一点点靠近

一.链表的简单介绍

链表是一种 物理存储结构上非连续 存储结构,数据元素的 逻辑顺序 是通过链表中的 引用链接 次序实现的 。
实际中链表的结构非常多样,以下情况组合起来就有8种链表结构:
1. 单向或者双向

 2. 带头或者不带头

3. 循环或者非循环

二.链表的实现 

首先先定义出一个链表

static class ListNode{
        public int val;
        public ListNode next;
        public ListNode(int val){
            this.val=val;
        }
    }

    //链表的属性,链表的头节点
    public ListNode head;//null

    public void creatList(){

        ListNode node1=new ListNode(11);
        ListNode node2=new ListNode(22);
        ListNode node3=new ListNode(33);
        ListNode node4=new ListNode(44);

        node1.next=node2;
        node2.next=node3;
        node3.next=node4;

        this.head=node1;
    }

 

使用画图来表示链表的形式

2.1头插法:在链表起始位置加入一个元素

public void addFirst(int data) {

        ListNode node11=new ListNode(data);
        node11.next=head;
        head=node11;

    }

2.2尾插法:在链表的末尾位置加入一个元素

注意:在添加时要注意这个链表是不是为空,若为空直接添加为头节点即可

public void addLast(int data) {
        ListNode node = new ListNode(data);
        ListNode cue = head;
        if (cue == null) {
            cue.next = head;
            cue.next = node;
            node.next = null;
            return;
        }
        else {
            while (cue.next != null) {
                cue = cue.next;
            }
            cue.next = node;
            node.next = null;
        }
    }

2.3任意位置插入一个数据节点:

将date加入到index位置

注意: 

1.在添加时要注意添加的位置是否小于0 或者比链表的长度大

2.注意是不是添加到首段或者是末尾,那样直接使用头插法或者尾插法即可

3.index如果等于1 ,说明找到了插入的位置,因为链表的顺序是从0开始的

看下图,蓝色表示最开始所指向的位置,绿色表示经过一次循环后所指向的位置

public void addIndex(int index, int data) {

        if(index<0||index>size()){
            System.out.println("不合法");
        }

        ListNode node = new ListNode(data);
        ListNode cue = head;
        ListNode cue1=cue;

        if(index==0){
            addFirst(data);
            return;
        }

        if (index==size()){
            addLast(data);
            return;
        }

        while (index!=1){
            index--;
            cue=cue.next;
            cue1=cue.next;
        }
        cue.next=node;
        node.next=cue1;
    }

2.4查找是否包含关键字key是否在单链表当中

这个就是遍历然后查找key,在就返回ture,不在就返回false

  public boolean contains(int key) {
        ListNode cur=head;
        while (cur!=null){
            if(cur.val==key){
                return true;
            }
            cur=cur.next;
        }

        return false;
    }

2.5删除第一次出现关键字为key的节点

注意: 

1.要注意是否为空指针

2.如果head与key相等可以直接返回

3.遍历寻找while中的if表示的是cue.next.val

public void remove(int key) {

        if (head==null){
            return;
        }

        if(head.val==key){
            head=head.next;
            return;
        }

        ListNode cue = head;
        ListNode del = head;

        while (cue.next!=null){
            if(cue.next.val==key){
                del=cue.next;
                cue.next=del.next;
                return;
            }
            cue=cue.next;
        }
        if(cue==null)
        {
            System.out.println("对不起没有要删除的数字");
        }
    }

2.6删除所有值为key的节点

注意: 

1.在添加时要注意是否为空指针

2.基础的走 if 就不会走 else

3.遍历寻找 while 中的 if 表示的是cue.val

public void removeAllKey(int key) {
        if (head==null){
            return;
        }

        ListNode prev = head;
        ListNode cue = head.next;

        while (cue!=null){
            if(cue.val==key){
                prev.next=cue.next;
                cue=cue.next;
            }
            else {
                prev=cue;
                cue=cue.next;
            }
        }

        if (head.val==key){
            head=head.next;
            return;
        }


    }

2.7得到单链表的长度

注意: 

是否为空指针

 public int size() {
        ListNode cur=head;
        int count=0;
        while (cur!=null){
            cur=cur.next;
            count++;
        }
        return count;
    }

2.8遍历单链表

public void display() {
        ListNode cur=head;
        while (cur!=null){
            System.out.print(cur.val+" ");
            cur=cur.next;
        }
        System.out.println();
    }

三.主要代码演示

public interface IList {
        //public class SingleLinkedList {
        //头插法
        void addFirst(int data);
        //尾插法
        void addLast(int data);
        //任意位置插入,第一个数据节点为0号下标
        void addIndex(int index,int data);
        //查找是否包含关键字key是否在单链表当中
        boolean contains(int key);
        //删除第一次出现关键字为key的节点
        void remove(int key);
        //删除所有值为key的节点
        void removeAllKey(int key);
        //得到单链表的长度
        int size();
        void display();
        // }

}
public class demo1 implements IList{

    static class ListNode{
        public int val;
        public ListNode next;
        public ListNode(int val){
            this.val=val;
        }
    }
}
public class Test {
    public static void main(String[] args){
        demo1 demo=new demo1();
        demo.creatList();

        demo.display();
        demo.size();

        System.out.println();
        System.out.println(demo.contains(22));
        System.out.println(demo.contains(99));

        //头插法
        demo.addFirst(10);
        demo.display();

        //尾插法
        demo.addLast(55);
        demo.display();

        demo.addIndex(2,88);
        demo.display();
        demo.addIndex(0,1);
        demo.addIndex(0,1);
        demo.addIndex(3,1);
        demo.addIndex(3,1);
        demo.display();

        demo.remove(1);
        demo.display();

        demo.removeAllKey(1);
        demo.display();
    }
}

运行结果(注意在IList中的所有代码都需要重写)

如果有解释的不对或者不清晰,如果可以从评论区指出,我一定会加以修改,万分感谢

希望对你们有所帮助

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/244632.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM的OA办公系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

在线免费压缩pdf文件

在线免费压缩pdf文件&#xff0c;不用登陆哦&#xff0c; https://www.ilovepdf.com/ https://online2pdf.com/#

IPIDEA科普大数据企业怎样使用IP代理工具进行数据抓取

相信有很多的朋友都很好奇一件事&#xff0c;一般大数据企业需要拥有海量的数据才能够进行数据分析整理和利用&#xff0c;那么他们都是如何抓取到这么多的数据呢&#xff1f;这些企业在抓取数据时都会使用什么工具&#xff0c;今天就跟大家科普一下。 其实大数据企业在进行数…

uniapp x 相比于其他的开发系统框架怎么样?

首先我们要知道niapp这是一种基于Vue.js开发的跨平台应用框架&#xff0c;可以将同一套代码同时运行在多个平台上&#xff0c;包括iOS、Android、H5等。相比其他开发系统框架&#xff0c;他有什么优点呢&#xff1f;让我们共同探讨一下吧&#xff01; 图片来源&#xff1a;unia…

《数据结构、算法与应用C++语言描述》-最大高度优先左高树-C++实现

左高树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_26maxHblt 定义 (大顶堆和小顶堆)堆结构是一种隐式数据结构(implicit data structure)。用完全二叉树表示的堆在数组中是隐式存储的(即没有明确的指针或其他数据能够用来重塑…

HTML5+CSS3+JS小实例:可拖拽排序的人物列表

实例:可拖拽排序的人物列表 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content=…

关东升老师极简系列丛书(由清华大学出版社出版)

极简系列丛书&#xff0c;编程学习新体验 在这个科技日新月异的时代&#xff0c;编程已经成为了一种必备技能。但是面对各种复杂的编程语言&#xff0c;你是否也曾感到过迷茫和困惑&#xff1f;由清华大学出版社出版的“极简系列丛书”就是为了帮助你解决这个问题。 这套丛书…

抖捧自动直播是什么,系统功能讲解

目前有在做实体行业级商家服务的老板 你还在为不会直播&#xff0c;不敢直播而苦恼吗&#xff1f; 你还在为想做直播&#xff0c;但没空开直播而焦灼吗&#xff1f; 今天&#xff0c;你的问题都可以统统解决 实体行业直播必备黑科技&#xff1a;抖捧AI自动直播 只需要一部手…

3号线开通在即, 你的「搭子」找好了吗?

搭子合伙者抱有同样目的的人 “搭子”作为一种新型社交关系和社交方式&#xff0c;正在年轻人当中盛行。 浅于朋友&#xff0c;重于同事&#xff0c; 主打“垂直领域”和“精准陪伴”。 不同场合大家都有专属“搭子”&#xff0c; “周末去孔学堂感受传统文化的研学搭子”“…

51单片机控制1602LCD显示屏输出两行文字一

51单片机控制1602LCD显示屏输出两行文字一 1.概述 这篇文章介绍1602型号显示屏的基础知识&#xff0c;以及使用单片机控制它输出两行内容。 2.1602基础知识 1602 液晶显示模块是一种通用的工业液晶显示模块&#xff0c;专门用来显示字母、数字、符号等的点阵型液晶显示模块…

宝塔PostgreSQL设置数据库远程访问

宝塔PostgreSQL设置数据库远程访问 宝塔的PostgreSQL1. 添加数据库2. 打开PostgreSQL设置界面3. 修改配置4. 重载配置/重启数据库 Docker的PostgreSQL1. postgresql.conf2. pg_hba.conf3. 重启数据库 注意其他问题 宝塔PostgreSQL设置数据库远程访问&#xff1f;docker容器Post…

软件设计师——计算机网络(二)

&#x1f4d1;前言 本文主要是【计算机网络】——软件设计师——计算机网络的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1…

纳管虚拟化 | ZStack Cube超融合一体机助力南京财经高职校智慧校园

数字经济正加速推动各行各业的高质量升级发展&#xff0c;云计算是数字经济的核心底层基础设施。作为云基础软件企业&#xff0c;云轴科技ZStack 坚持自主创新&#xff0c;自研架构&#xff0c;产品矩阵可全面覆盖数据中心云基础设施&#xff0c;针对虚拟化资源实现纳管、替代和…

微软自带浏览器Edge,无法关闭“保存历史记录网站的屏幕截图”解决方案

微软自带浏览器Edge&#xff0c;无法关闭“保存历史记录网站的屏幕截图”解决方案 吐槽1&#xff1a;Windows自带的Chrome内核版本的浏览器Microsofg Edge刚发布时可谓一股清流&#xff0c;启动速度快&#xff0c;占用内存较小&#xff0c;相信很多人也开始抛弃正代Chrome&…

翻译: 生成式人工智能项目的生命周期 Lifecycle of a generative AI project

我将分享一下构建生成式AI软件应用程序的过程。首先&#xff0c;我们会确定项目范围&#xff0c;决定软件要实现的功能。例如&#xff0c;你可能决定建立一个餐厅声誉监控系统。接下来是实际的实施阶段。由于生成式AI使构建应用程序变得容易&#xff0c;你通常可以很快构建出一…

一文读懂Java中的设计模式——模板方法,给大家的代码添点料!

模板方法概念 模板设计模式是类的行为模式。准备一个抽象类&#xff0c;将部分逻辑以具体方法以及具体构造函数的形式实现&#xff0c;然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法&#xff0c;从而对剩余的逻辑有不同的实现。…

给一个容器添加el-popover/el-tooltip内容提示框

效果&#xff1a; html: <div class"evaluate"><div class"list flex-column-center" v-for"(item, index) in evaluateList" :key"index"mouseenter"mouseenterHandler(item)" mouseleave"mouseleaveHandle…

ProcessOn在线绘制部分项目流程图

目录 一、ProcessOn 1.1 简介 1.2 官方网站 二、Axure自定义元件库 2.1 新建元件库 2.2 自定义元件 2.3 添加元件库 三、HIS系统门诊流程图 四、HIS系统住院流程图 五、HIS系统药品采购入库流程图 六、OA会议流程图 一、ProcessOn 1.1 简介 ProcessOn是一款在线的流…

10.CSS浮动

CSS浮动 1.介绍 在最初&#xff0c;浮动是用来实现文字环绕图片效果的&#xff0c;现在浮动是主流的页面布局方式之一 2.作用 让元素脱离标准流&#xff0c;同一级的浮动的元素可以并排在一排显示 3.元素浮动后的特点 脱离文档流不管浮动前是什么元素&#xff0c;浮动后&…