[C/C++]数据结构 链表OJ题:移除链表元素

news/2024/11/17 7:36:02/

题目描述:

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

 

方法一: 从头开始遍历链表,当遇到相同元素则跳过该元素,指向下一节点

struct ListNode* removeElements(struct ListNode* head, int val) {if(head == NULL)return NULL;struct ListNode* cur = head;struct ListNode* prev = NULL;while(cur){//如果当前节点是需要删除的节点if(cur->val == val){//首先保存下一个节点struct ListNode* next = cur->next;//如果删除的为头节点,更新头节点//否则让当前节点的前趋节点链接next节点if(prev == NULL){head = cur->next;}else{prev->next =next;  }//释放当前节点,让cur指向nextfree(cur);cur = next;}else{//如果cur不是需要删除的节点,则更新prev,curprev = cur;cur = cur->next;}}return head;
}

这里要特别注意一种情况,当结点就为要删除的元素时,记得要更新头节点,由于我们会释放掉结点,不更新头结点会返回一个野指针

方法二: 定义一个新链表,依次尾插与val不同的结点


struct ListNode* removeElements(struct ListNode* head, int val) {struct ListNode* newnode=NULL,*tail=NULL;struct ListNode* cur=head;while(cur){if(cur->val!=val){//插入第一个结点要特殊判断if(tail==NULL){newnode=tail=cur;}else{tail->next=cur;tail=tail->next;}cur=cur->next;}else{//删除当前节点,cur向后走struct ListNode* tmp=cur;cur=cur->next;free(tmp);}}if(tail)tail->next=NULL;return newnode;
}

 本题中,tail始终指向新链表的末尾,便于尾插操作,插入元素时要先判断是否为第一个元素,即当尾指针tail为空时,新链表为空,这时需要将newnode和tail指向尾插的第一个结点,最后记得把尾指针置空,防止其指向野指针


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

相关文章

Xcode15 framework ‘CoreAudioTypes‘ not found

Xcode15遇见"framework ‘CoreAudioTypes’ not found。" 可尝试移除CoreAudioTypes,添加CoreAudio。 CoreAudio是CoreAudioTypes的套壳。 CoreAudio/CoreAudioTypes.h头文件内容 /*CoreAudio/CoreAudioTypes.h has moved to CoreAudioTypes/CoreAudi…

OpenAI史诗级更新,最强大模型炸场,128K上下文、价格暴降2/3,定制专属GPT快到只需5分钟

今早,2023年最瞩目的人工智能大会举办! CSDN11月7日报道,今天凌晨2点,在OpenAI首届开发者大会上,OpenAI的首席执行官萨姆•阿尔特曼(Sam Altman)宣布了GPT-4、ChatGPT的年度最重磅更新。 OpenA…

Mysql查询今天到期、n天即将到期、还有n天过期相关sql

超级治愈的一段话 其实你已经很幸福了,吃饱穿暖,没病没灾,隔三岔五还能吃顿好的,偶尔还能睡到自然醒,肥嘟嘟的一身福气。人这一辈子,要是能够逃过天灾,躲过战乱,不遇歹人,不生大病,就已经是非常幸运了,要是还能家庭和谐,收人稳定,三五知己,那更是天大的福泽。 -…

UE5.3实现1秒12帧的动画播放抽帧效果

现今一些卡通风格游戏会刻意模仿早期动画1秒12帧的播放效果,以营造较强的风格化体验,博主在UE5中实现了一下(左侧正常动画,右侧抽帧动画): 我们可以通过在UE中对导入设置进行一些修改,达到不改…

OpenSSH

SSH(Secure SHell protocol)是一种在不安全网络上提供安全远程登录及其它安全网络服务的协议。SSH协议使用的是TCP 22号端口,telnet 使用的是TCP的23号端口,SSH协议是C/S架构,分为服务器端与客户端。 OpenSSH是对SSH协…

【Redis】掌握篇--Redis与SSM进行整合

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Redis的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.Redis与SSM的整合 1.添加Redis依赖 …

【MySQL事务篇】多版本并发控制(MVCC)

多版本并发控制(MVCC) 文章目录 多版本并发控制(MVCC)1. 概述2. 快照读与当前读2.1 快照读2.2 当前读 3. MVCC实现原理之ReadView3.1 ReadView概述3.2 设计思路3.3 ReadView的规则3.4 MVCC整体操作流程 4. 举例说明4.1 READ COMMITTED隔离级别下4.2 REPEATABLE READ隔离级别下 …

macOS磁盘分区调整软件--Paragon Camptune X 中文

Paragon Camptune X是一款专为Mac用户设计的强大分区大小调整工具。通过它,用户可以简便地调整Mac硬盘上的分区大小,实现存储空间的高效管理。无论是需要在Mac和Windows系统之间切换的双系统用户,还是有其他特定存储需求的用户,Ca…