码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 猿创征文 |『牛客|每日一题』循环链表


    模板链表

    👨‍🎓作者简介:一位喜欢写作,计科专业大三菜鸟

    🏡个人主页:starry陆离

    🕒首发日期:2022年8月29日星期一

    🍁每日推荐:牛客网-面试神器
    在这里插入图片描述

    猿创征文 |『牛客|每日一题』循环链表

    • 1.每日一题
    • 2.测试案例
    • 3.思路分析
      • 3.1增
      • 3.2删
    • 4.代码实现
    • 5.每日推荐

    1.每日一题

    描述
    请你实现一个链表。
    操作:
    insert x y:将y加入链表,插入在第一个值为x的结点之前。若链表中不存在值为x的结点,则插入在链表末尾。保证x,y为int型整数。
    delete x:删除链表中第一个值为x的结点。若不存在值为x的结点,则不删除。
    输入描述:
    第一行输入一个整数n (1 < n < 104 ),表示操作次数。
    接下来的n行,每行一个字符串,表示一个操作。保证操作是题目描述中的一种。
    输出描述:
    输出一行,将链表中所有结点的值按顺序输出。若链表为空,输出"NULL"(不含引号)。
    image-20220829195342795

    2.测试案例

    5
    insert 0 1
    insert 0 3
    insert 1 2
    insert 3 4
    delete 4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    2 1 3
    
    • 1

    3.思路分析

    这题是要我们自己实现一个链表。链表是一种物理结构上非连续、非顺序的存储结构。而链表中常用的就是增删改查。

    3.1增

    将y值插入到x节点之前

    1. 找到节点x的前一个节点xp,
    2. 让节点y指向节点x,也就是y.next=xp.next
    3. 最后让节点xp指向节点y,也就是xp.next=y

    image-20220829200451708

    3.2删

    删除节点x

    1. 找到节点x的前一个节点xp,
    2. 让xp指向x的下一个节点,即xp.next=xp.next.next

    image-20220829201030243

    4.代码实现

    import java.util.*;
    
    public class Main {
        public static void main(String[] args){
            Scanner sca=new Scanner(System.in);
            MyList list=new MyList();
            int n=sca.nextInt();
            sca.nextLine();
            String[] s;
            String op;
            int x,y;
            for(int i=0;i<n;++i){
                s=sca.nextLine().split(" ");
                op=s[0];
                x=Integer.parseInt(s[1]);
                if(op.equals("insert")){
                    y=Integer.parseInt(s[2]);
                    list.insert(x,y);
                }else{
                    list.delete(x);
                }
            }
            System.out.println(list);
        }
    }
    //定义节点
    class Node{
        int val;//值
        Node next;//指向下一个节点
        public Node(int val){
            this.val=val;
        }
    }
    //自定义链表
    class MyList{
        Node root;//头节点
        public MyList(){
            root =new Node(-1);
        }
        
        //查找值为x的节点的前一个节点
        public Node findPre(int x){
            Node cur=root;
            while(cur.next!=null&&cur.next.val!=x){
                cur=cur.next;
            }
            return cur;
        }
        
        //将y值插入到x节点之前
        public void insert(int x,int y){
            Node xPre=findPre(x);//查找值为x的节点的前一个节点
            Node yNode=new Node(y);//创建y节点
            yNode.next=xPre.next;//节点y的下一个节点是x节点指向的下一个节点
            xPre.next=yNode;//更新x节点的下一个节点是y节点
        }
        
        //删除节点x
        public void delete(int x){
            Node xPre=findPre(x);//查找值为x的节点的前一个节点
            if(xPre.next!=null){
                xPre.next=xPre.next.next;
            }
        }
        
        //输出链表中的值
        public String toString(){
            StringBuffer sb=new StringBuffer();
            if(root.next==null){
                return "NULL";
            }else{
                Node cur=root.next;
                while(cur!=null){
                    sb.append(cur.val+" ");
                    cur=cur.next;
                }
            }
            return sb.toString();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    image-20220829195246009

    5.每日推荐

    📚订阅专栏:『牛客刷题集锦』

    🍁每日推荐:基础算法无论在研究生面试还是求职面试都是十分重要的一环,这里推荐一款算法面试神器:牛客网-面试神器;算法题只有多刷勤刷才能保持思路与手感,大家赶紧行动起来吧(温馨提示:常见的面试问答题库也很nice哦)
    在这里插入图片描述

    如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦

  • 相关阅读:
    【计算机网络】——数据链路层(应用:局域网、广域网、设备 )
    Spring Boot 实现参数校验基本使用
    外网系统怎么访问协同oa?快解析内网端口映射公网
    巧用前缀和
    Thymeleaf SSTI模板注入分析
    python写入文件后读取空白,写入文件无法读取解决方案
    centos7.3无法使用ping命令提示connect: Resource temporarily unavailable
    新手如何快速用vue导入GLTFLoader模型
    Codeforces Round #822 (Div. 2) F. Zeros and Ones (Thue-Morse序列 & 带进位的数位dp)
    RabbtiMQ的安装与使用
  • 原文地址:https://blog.csdn.net/weixin_53463734/article/details/126592399
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号