当前位置: 首页 > article >正文

代码随想录算法训练营第三天 | 链表理论基础 | 203.移除链表元素

  • 感觉上是可以轻松完成的,因为对链接的结构,元素的删除过程心里明镜似的

  • 实际上四处跑气

    • 结构体的初始化好像完全忘掉了,用malloc折腾半天,忘记了用new,真想扇自己嘴巴子到飞起
    • 删除后写一个函数,把链表打印出来,对于有些数据始终报段错误,后来发现是removeElements函数的返回值没有重新给头指针赋值,导致还指向已被删除的空间
  • 现在这些知识点自己还是有些基础的,但完全手生到跟没学一样啊

  • #include <iostream>
    
    struct ListNode {
        int val = 0;
        ListNode* next;
        ListNode(): val(0), next(nullptr) {}
        ListNode(int v): val(v), next(nullptr) {}
        ListNode(int v, ListNode* _next): val(v), next(_next) {}
    };
    
    class Solution {
    public:
        ListNode* removeElements(ListNode* head, int val) {
            if (head == nullptr) return nullptr;
            auto* visualHead = new ListNode(0);
            visualHead->next = head;
            for (auto *p = visualHead; p->next != nullptr;) {
                if (p->next->val == val) {
                    auto* temp = p->next;
                    p->next = p->next->next;
                    delete temp;
                } else p = p->next;
            }
            head = visualHead->next;
            delete visualHead;
            return head;
        }
        void show(ListNode* head) {
            for (auto* p = head; p != nullptr; p = p->next)
                std::cout << p->val << " ";
            std::cout << std::endl;
        }
    };
    
    int main()
    {
        int del_val;
        std::cin >> del_val;
    
        ListNode* p = nullptr;
        for (int val; std::cin >> val; p = new ListNode(val, p));
    
        std::cout << del_val << std::endl;
        Solution s;
        p = s.removeElements(p, del_val);
        s.show(p);
        return 0;
    }
    // 执行后输入5 5 5 3 2 5 5 1 a
    // 第一个5表示要删除的值,最后一个a表示输入结束,一开始会反向生成链表1->5->5->2->3->5->5->5,然后再把5的结点删除
    
  • 测试代码耗时至少二个小时

  • 在测试时发现,对链接的边界处的值设定与安排还是一头雾水,思想深刻度与对链表更精深的理解还不到位

  • 当天其它题目:设计链表

  • 当天其它题目:反转链表

  • 汇总


http://www.kler.cn/a/441288.html

相关文章:

  • Python练习(2)
  • Swing使用MVC模型架构
  • shell脚本
  • C++并发编程指南02
  • docker安装emqx
  • 【教学类-89-01】20250127新年篇01—— 蛇年红包(WORD模版)
  • wsl下Ubuntu(Linux)配置VSCode环境(C、C++)
  • SQL Server中将字符串“08-01-2024“转换成日期值的方法
  • YOLOv10改进,YOLOv10添加DLKA-Attention可变形大核注意力,WACV2024 ,二次C2f结构
  • 利用卷积神经网络进行手写数字的识别
  • go语言zero项目通过Supervisor启动与停用的管理
  • Rust HTTP请求库
  • meta llama 大模型一个基础语言模型的集合
  • geoserver 瓦片地图,tomcat和nginx实现负载均衡
  • npm下载依赖相关命令
  • 说一下你对 webScoket的了解,以及有哪些API
  • 12.13 深度学习-空间注意力仿射变换STN
  • 使用Vue.js构建待办事项应用:从零到上线
  • Webpack是什么?
  • 《Django 5 By Example》阅读笔记:p543-p550
  • LeetCode刷题day26——动态规划
  • 秒杀业务中的库存扣减为什么不加分布式锁?
  • C# 趋势图:洞察其发展轨迹与未来走向
  • 力扣题目解析--两两交换链表中的节点
  • Linux驱动开发(14):PWM子系统–pwm波形输出实验
  • 【Prompt Engineering】3.文本概括