代码随想录算法训练营第三天|203 移除链表元素 707 设计链表 206 反转链表

news/2024/9/22 23:36:51/

文章目录

  • 203 移除链表元素
    • 思路
    • 代码
    • 总结
  • 707 设计链表
    • 思路
    • 代码
    • 总结
  • 206 反转链表
    • 思路
    • 代码
    • 总结

203 移除链表元素

思路

虚链表头
今天复习写得不是很流畅
虚假头结点可以不用考虑原始头结点是否需要删除,这样以一个统一的标准记忆更方便。
没记清楚的点在于:忘记需要再定义一个指针 = dummyhead了
(如果是直接处理原始链表,最后在判断头结点时需要注意空链表的情况)

代码

class Solution {
public:ListNode* removeElements(ListNode* head, int val) {// 因为可能这个链表的头节点就是需要删除的结点// 所以我们设置一个虚假的头结点// 遍历结束后再删除这个虚假头结点ListNode* dummyhead = new ListNode(0);dummyhead->next = head;ListNode* cur;cur = dummyhead;while (cur->next != NULL) {if (cur->next->val == val) {ListNode * temp;temp = cur->next;cur->next = cur->next->next;delete temp;}else {cur = cur->next;}} head = dummyhead->next;delete dummyhead;return head;}
};

总结

  1. 虚拟头结点

707 设计链表

思路

之前自己也就刚写到这题,到这题之后都还没写过了
这道题设计到的链表操作比较多,适合复习链表操作
这题磨了好久……主要是没理解下标从0开始.
实际上 设计的_size变量就是链表长度(可以对标于数组长度)
剩下的一些细节位置问题(比如index--cur=_dummyhead等问题)死记硬背效果不好,在写的时候画图辅助效果比较好

代码

class MyLinkedList {// 重要:下标从0开始
public:struct  ListNode{int val;ListNode* next;ListNode(int val): val(val),next(nullptr) {}};MyLinkedList() {_dummyhead = new ListNode(0);_size = 0;}int get(int index) {if (index > (_size-1) || index < 0) {return -1;}ListNode* cur;cur = _dummyhead->next;while (index --) {cur = cur->next;}return cur->val;}void addAtHead(int val) {ListNode* node = new ListNode(val);// ListNode* cur;// cur = _dummyhead->next;// _dummyhead -> next = node;// node -> next = cur;node ->next = _dummyhead ->next;_dummyhead -> next = node;_size++;}void addAtTail(int val) {ListNode* node = new ListNode(val);ListNode* cur;cur = _dummyhead;while (cur -> next != NULL) {cur = cur -> next;}cur -> next = node;_size ++;}void addAtIndex(int index, int val) {if (index > _size) {return;}if (index < 0) index = 0;ListNode* node = new ListNode(val);ListNode* cur = _dummyhead;while (index--){cur = cur -> next;}node ->next = cur -> next;cur -> next = node;_size++;}void deleteAtIndex(int index) {if (index <0 || index >= _size){return;}else {ListNode* cur;cur = _dummyhead;while (index --) {cur = cur -> next;}ListNode* tmp;tmp = cur -> next;cur -> next = cur -> next -> next;delete tmp;_size --;}}private:ListNode* _dummyhead;int _size; // 这个_size的含义是链表的长度,==len(数组)
};

总结

  1. _size的含义是链表长度,可以理解为数组长度,与数组下标&数组长度的关系一样
  2. 可以用于复习链表操作

206 反转链表

思路

定义两个指针,一个cur指向原始头结点,一个pre指向空
在循环过程中,定义临时指针tmp指向cur->next,逆转两个结点关系后,向后遍历。循环条件是cur没到NULL,当cur到NULL时,pre就在原始链表最后一个数组上了,返回pre.

代码

class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode* pre = NULL;ListNode* cur = head;ListNode* tmp;while (cur != NULL) {tmp = cur -> next;cur -> next = pre;pre = cur;cur = tmp;}return pre;}
};

总结

  1. 比较简单的一题。

http://www.ppmy.cn/news/38666.html

相关文章

Java-0401~03

多线程 创建和启动线程方式一&#xff1a;Thread类 概述 Java 语言的 JVM 允许程序运行多个线程&#xff0c;使用 java.lang.Thread 类代表线程&#xff0c;所 有的线程对象都必须是 Thread 类或其子类的实例。Thread 类的特性 每个线程都是通过某个特定 Thread 对象的 run()方…

大疆 行者无疆(一)

目录 1.技术铸品牌之基 2.应用场景壮品牌之骨 3.传播强品牌之势 近日&#xff0c;正式发布Mavic 3行业无人机的大疆&#xff0c;搬迁新建办公楼天空之城的大疆&#xff0c;被美国防部列入黑名单的大疆&#xff0c;再次霸占热搜和头条。惊艳唯美和至暗交织&#xff0c;否泰相依…

Android: 使用libevent和libcurl去实现http和https服务器,用来测试android客户端程序

记录一下一篇好的博文&#xff1a;使用libevent和libcurl去实现http和https服务器 http://eleaction01.spaces.eepw.com.cn/articles/article/item/183383 前言 libevent和libcurl都是功能强大的开源库&#xff1b;libevent主要实现服务器&#xff0c;包含了select、epoll等高…

论文阅读《Point NeRF:Point-based Neural Radiance Fileds》

论文地址&#xff1a;https://arxiv.org/abs/2201.08845 源码地址&#xff1a;https://xharlie.github.io/projects/project_sites/pointnerf 概述 体素神经渲染的方法生成高质量的结果非常耗时&#xff0c;且对不同场景需要重新训练&#xff08;模型不具备泛化能力&#xff09…

springboot(10)异步任务

文章目录1、SpringBoot异步任务1.1使用注解EnableAsync开启异步任务支持1.2使用Async注解标记要进行异步执行的方法1.3controller测试2.异步任务相关限制3.1自定义 Executor3.1.1应用层级&#xff1a;3.1.2方法层级&#xff1a;3.2自定义 Executor (第二种方式)4.1异常处理4.1.…

【python设计模式】3、抽象工厂模式

设计哲学&#xff1a; 抽象工厂模式的哲学思想是面向接口编程&#xff08;Interface Segregation Principle&#xff0c;ISP&#xff09;。这一原则强调&#xff0c;客户端不应该依赖于它不需要的接口&#xff0c;而应该将接口尽可能地细化&#xff0c;只包含客户端所需的方法…

数字藏品系统功能介绍

一、特色功能 1、数字藏品专业的产品打造 为数字藏品提供链上的存证独立的身份认证&#xff0c;所有的产品都是有一连串数字的。 2、数字藏品实现发售&#xff0c;拍卖&#xff0c;申购&#xff0c;盲盒等 数字藏品提供发售渠道&#xff0c;利用多种模式的方式进行发售&…

项目二:电子骰子

项目二&#xff1a;电子骰子 文章目录项目二&#xff1a;电子骰子一、导入(5分钟&#xff09;学习目的二、新授(65分钟)1.预展示结果(5分钟)2.本节课所用的软硬件(5分钟)3.硬件介绍(1分钟)4.图形化块介绍(1分钟)5.单个模块的简单使用(1分钟)6.电子骰子编程逻辑分析(25分钟)7.电…