代码随想录算法训练营Day.3| 移除链表元素 设计链表 反转链表

devtools/2024/11/7 15:03:38/

长沙出差ing,今天的核心是链表,一个比较基础且重要的数据结构。对C++的指针的使用,对象的创建,都比较考察,且重要。

203.移除链表元素

dummyNode虚拟头节点很重要,另外就是一个前后节点记录的问题。但是LeetCode不能free,日常还是要养成用完指针free的好习惯。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* removeElements(ListNode* head, int val) {if(head == NULL) return head;ListNode *var = head;ListNode *dummy = new ListNode(-1,head);ListNode *pre = dummy;dummy->next = head;while(var->next != NULL){if(var->val == val){pre->next = var->next;// free(var);var = pre->next;}else{pre = var;var = pre->next;}}if(var->val == val){pre->next = NULL;// free(var);}return dummy->next;}
};

707.设计链表

经典的设计链表,注意C++指针和对象的使用,在判断时还会漏掉最后一个节点或第一个节点的问题。这里就贴一下我的丑代码:

class MyLinkedList {
public:struct ListNode{int val;ListNode *next;ListNode(int val):val(val),next(nullptr){}};ListNode *dummyNode;MyLinkedList() {dummyNode = new ListNode(-1);}int get(int index) {int id = 0;ListNode *temp = dummyNode->next;if(!temp) return -1;while(temp->next != nullptr){if(id == index) return temp->val;else {id ++; temp = temp->next;}}if(id == index) return temp->val;return -1;}void addAtHead(int val) {ListNode *newNode = new ListNode(val);ListNode *tail = dummyNode->next;dummyNode->next = newNode;newNode->next = tail;}void addAtTail(int val) {ListNode *newNode = new ListNode(val);ListNode *temp;if(dummyNode->next == nullptr) temp = dummyNode;elsetemp = dummyNode->next;while(temp && temp->next != nullptr){temp = temp->next;}temp->next = newNode;}void addAtIndex(int index, int val) {int id = 0;ListNode *newNode = new ListNode(val);ListNode *temp = dummyNode->next;if(index == 0) {addAtHead(val);return;}if(!temp) return;while(temp->next != nullptr){if(id+1 == index) {ListNode *tail = temp->next;temp->next = newNode;newNode->next = tail;return;}else {id ++; temp = temp->next;}}if(id+1 == index) {ListNode *tail = temp->next;temp->next = newNode;newNode->next = tail;return;}return;}void deleteAtIndex(int index) {int id = 0;ListNode *temp = dummyNode->next;if(index == 0){if(temp){ListNode *tail = temp->next;// free(temp->next);dummyNode->next = tail;}return;}while(temp->next != nullptr){if(id+1 == index) {ListNode *tail = temp->next->next;// free(temp->next);temp->next = tail;return;}else {id ++; temp = temp->next;}}return;}
};/*** Your MyLinkedList object will be instantiated and called as such:* MyLinkedList* obj = new MyLinkedList();* int param_1 = obj->get(index);* obj->addAtHead(val);* obj->addAtTail(val);* obj->addAtIndex(index,val);* obj->deleteAtIndex(index);*/

206.反转链表

经典的链表反转,注意前后指针的记录即可。

class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode* temp; // 保存cur的下一个节点ListNode* cur = head;ListNode* pre = NULL;while(cur) {temp = cur->next;  // 保存一下 cur的下一个节点,因为接下来要改变cur->nextcur->next = pre; // 翻转操作// 更新pre 和 cur指针pre = cur;cur = temp;}return pre;}
};

http://www.ppmy.cn/devtools/132033.html

相关文章

华为HarmonyOS借助AR引擎帮助应用实现虚拟与现实交互的能力3-获取设备位姿

设备位姿描述了物体在真实世界中的位置和朝向。AR Engine提供了世界坐标下6自由度(6DoF)的位姿计算,包括物体的位置(沿x、y、z轴方向位移)和朝向(绕x、y、z轴旋转)。通过AR Engine,您…

Java自动点名器实现案例详解

Java自动点名器实现案例详解 在教学管理中,点名是一项重要的任务。随着技术的发展,使用编程语言实现自动化的点名器不仅可以提高效率,还能增加课堂的互动性和趣味性。本文将详细介绍三个案例,分别是简单随机点名器、带有权重的随…

在使用Alt+Tab切换程序时 Windows 11 24H2会出现黑屏

Windows 中的 Alt-Tab 快捷键组合可帮助您在多个活动应用窗口之间循环跳转。 但是,在 Windows 11 24H2 更新中,该快捷键被弄坏了,如果按下组合键,就会触发黑屏。 虽然 Alt Tab 功能不会停止工作,但黑屏会持续 10 秒钟…

有Bootloader,为什么还要BROM?

有Bootloader,为什么还要BROM? 不少硬件平台都提供类似Boot ROM或者PBL(高通平台)固化的一段程序,出厂后用户一定不能修改。BROM可以引导Bootloader程序。大家知道,每个可启动的平台都会在存储设备,例如EMMC/NAND/UFS保存Bootloa…

工作管理实战指南:利用Jira、Confluence等Atlassian工具打破信息孤岛,增强团队协作【含免费指南】

如果工作场所存在超级反派,其中之一可能会被命名为“信息孤岛”,因为它们能够对公司的生产力和协作造成严重破坏。当公司决定使用太多互不关联的工具来完成工作时,“信息孤岛”就会出现,导致团队需要耗费大量时间才能就某件事情达…

LLMs之Calculate:利用大语言模型技术基于文本内容实现数字计算能力的简介、常用方法、代码实现之详细攻略

LLMs之Calculate:利用大语言模型技术基于文本内容实现数字计算能力的简介、常用方法、代码实现之详细攻略 导读:在基于大语言模型(LLM)技术实现数字计算能力的背景下,文本内容的理解和计算过程涉及多个领域的交叉技术,包括自然语言处理(NLP)、机器学习、以及数值计算。…

Caché/IRIS file2Xml 一个将文件转换成Studio导出的xml格式的工具

file2Xml 一个将文件转换成Studio导出的xml格式的工具 通过此工具可以将本地文件转换成xml格式文件,然后通过Studio导入到服务器中,而不再需要其他工具将文件传至服务器。 下面以为ensemble2016自带的一个示例界面增加背景图为例。 http://localhos…

使用C++和QT开发应用程序入门以及开发实例分享

目录 1、搭建开发环境(VS2010和QT4.8.2) 2、创建一个QT窗口 3、在QT窗口中添加子窗口 4、QT界面布局 5、QT信号(SIGNAL)和槽(SLOT) 6、最后 C软件异常排查从入门到精通系列教程(专栏文章列…