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

链表类算法【leetcode】

链表的定义

面试时,需要自己手写...

// 单链表
struct ListNode {int val;  // 节点上存储的元素ListNode *next;  // 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {}  // 节点的构造函数
};

【构造函数可以省略,C++默认生成一个构造函数,但是这个构造函数不会初始化任何成员变量】

//自己定义构造函数初始化节点
ListNode* head = new ListNode(5);//使用默认构造函数初始化节点
ListNode* head = new ListNode();
head->val = 5;

203.移除链表元素

2024.11.09

题目:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。力扣题目链接

说明一下,使用C++来做leetcode,如果移除一个节点之后,没有手动在内存中删除这个节点,leetcode依然也是可以通过的,只不过,内存使用的空间大一些而已,但建议依然要养成手动清理内存的习惯。当然如果使用java ,python的话就不用手动管理内存了。

此处的链表是单链表,所以找不到前节点,只能找到后节点。

然后要删去头结点处理会比较特殊,所以头结点和其他节点要分开处理,除非你设一个虚拟头结点指向头结点,就可以统一处理方式,这也是一种方法。

我是对二者分开处理。如果前面n个val的值都是val,那么每次删除完之后,头节点又是待删除节点,所以不要使用if要使用while。

两次处理

/*** 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) {//删除头结点的情况while(head != NULL && head -> val == val)       //这里不可以用if,因为可能一连串的val都在链表前端,会导致删完头结点后,下一个头结点还是等于val{ListNode* temp = head;head = head -> next;delete temp;}//为什么cur指向head,因为除了头结点外,其他被删除节点都在head后面,单链表不能找前节点,只能用nextListNode* cur = head;//删除非头节点while(cur != NULL && cur -> next != NULL){if(cur -> next -> val == val){ListNode* temp = cur -> next;cur -> next = cur -> next -> next;delete temp;}else{cur = cur -> next;}}return head;}
};

统一处理

class Solution {
public:ListNode* removeElements(ListNode* head, int val) {ListNode* dummyHead = new ListNode(0); // 设置一个虚拟头结点dummyHead->next = head; // 将虚拟头结点指向head,这样方便后面做删除操作ListNode* cur = dummyHead;while (cur->next != NULL) {if(cur->next->val == val) {ListNode* tmp = cur->next;cur->next = cur->next->next;delete tmp;} else {cur = cur->next;}}head = dummyHead->next;delete dummyHead;return head;}
};

未完待续....


http://www.mrgr.cn/news/69418.html

相关文章:

  • 【人工智能】langchain应用的简单QA流程链路
  • java 泛型中的 ?
  • caozha-CEPCS(新冠肺炎疫情防控系统)
  • React Native 全栈开发实战班 :数据管理与状态之React Hooks 基础
  • 关于我重生到21世纪学C语言这件事——指针详解(1)
  • LeetCode【0038】外观数列
  • 记录一次性能优化流程
  • Controlnet作者新作IC-light V2:基于FLUX训练,支持处理风格化图像,细节远高于SD1.5
  • 【1】虚拟机安装
  • AI 写作(五)核心技术之文本摘要:分类与应用(5/10)
  • 从0开始学习机器学习--Day20--优化算法的思路
  • Sequelize+Sqlite3使用示例
  • “2048”游戏网页版html+css+js
  • 2024系统分析师---微服务架构(淘宝押题)
  • 万字长文解读深度学习——GPT、BERT、T5
  • FFmpeg存放压缩后的音视频数据的结构体:AVPacket简介,结构体,函数
  • C++入门(下)
  • 关于c语言内存越界及防范措施
  • C#-密封类、密封方法
  • 发顶会首选:大模型+时间序列!掌握这3大切入点,小白也能轻松上手!
  • 终端会话工具byobu
  • 增强现实技术在零售业中的应用
  • 程序员应该有什么职业素养?
  • 每日一题之二叉树
  • 程序员学长 | 最强总结,机器学习中处理不平衡数据集的五种方法!!
  • 配置多公钥在多平台使用Git