203. 移除链表元素-c语言
创始人
2025-05-29 09:28:26
0

题目来源:力扣

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

本题有两种解决方法

目录

代码1:

 代码2


示例 1:

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]

示例 2:

输入:head = [], val = 1
输出:[]

示例 3:

输入:head = [7,7,7,7], val = 7
输出:[]

代码1:
 

struct ListNode* removeElements(struct ListNode* head, int val){struct ListNode* prev=NULL;struct ListNode* cur=head;while(cur){if(cur->val!=val){prev=cur;cur=cur->next;}else{if(prev==NULL){head=cur->next;free(cur);cur=head;}else{prev->next=cur->next;free(cur);cur=prev->next;}}}return head;
}

 思路:我们逐段进行分析

我们使用两个指针,一前一后

 使cur先指向头,prev在cur之前(最开始为空),然后我们对cur的val进行判断,如果cur的val不等于题给的val,说明不需要删除该节点,我们让prev=cur,然后cur指向next即可,若cur的val与题给val相等,说明需要删除节点,我们让prev的next指向cur的next(prev在cur之前),然后我们释放掉cur,接着让cur指向prev的next即可,如果我们此时提交,就会发现有错误,示例3是过不了的,我们对代码进行解析,发现最开始时cur的val就等于val,此时进入循环,prev的next需要进行指向,但此时的prev为空,所以会出现空指针问题,也就是说,我们有可能需要进行头删,所以我们再次进行判断,即else里我们加的if,如果prev为空,我们进行头删。让head指向cur的next,然后释放cur,cur再指向head即可

 代码2

struct ListNode* removeElements(struct ListNode* head, int val){//if(head==NULL){//    return NULL;//}struct ListNode* newhead=NULL;struct ListNode* cur=head;struct ListNode* tail=NULL;while(cur){if(cur->val!=val){if(newhead==NULL){newhead=tail=cur;}else{tail->next=cur;tail=tail->next;}cur=cur->next;}else{struct ListNode* next=cur->next;free(cur);cur=next;}}if(tail){tail->next=NULL;}return newhead;
}

思路:

我们创建一个新节点为新的头节点,将符合条件的节点尾插到新节点,最后返回即可

我们创建newhead和cur,还有tail节点,tail是用来指向newhead的尾节点,不然每次我们都要遍历新链表,我们对原链表进行遍历,如果val不等于cur的val,说明要将该节点尾插到newhead,不过在尾插前,我们要先判断是否为第一个节点,即newhead和tail都为NULL,此时我们要单独处理,其余情况我们将tail的next指向cur,然后tail向后移动即可,最后再让cur向后移动,如果不等于,说明要删除该节点,我们先保存cur的next,然后释放cur,cur指向next即可,我们此时提交,会出现错误,如果最后一个节点是我们要删除的,那么最后tail的next是有问题的,所以我们最后单独处理,将tail的next置为空即可,我们再次提交的话,还是会出现问题,空链表无法处理,我们对其单独处理,即前三行我屏蔽的代码,接着再次提交,示例3出现问题,我们分析知道,全部删除的话,最后newhead和tail都为空,所以我们最后对tail进行判断,如果tail不为空,也就是说我们的newhead是有节点的,我们将tail的next置为空,否则我们直接返回newhead,此时newhead为空,也就是空链表和全删除的情况我们都可以处理,所以我们删除前三行单独处理空链表的代码即可(不删也无所谓)

 

相关内容

热门资讯

华熙生物赵燕谈胶原蛋白乱象:科... 21世纪经济报道记者雷晨 北京报道 近年来,重组胶原蛋白成为医美和护肤领域的热门概念,市场宣传中不乏...
富春染织完成董事会选举换届 开... 7月25日晚间,富春染织公告显示,当日,公司2025年第一次临时股东会和富春染织第四届第一次董事会在...
圣湘生物:两款产品取得医疗器械... 每经AI快讯,圣湘生物(SH 688289,收盘价:22.94元)7月27日晚间发布公告称,圣湘生物...
10年期国债收益率升至1.73... 近期债券市场出现显著调整,多重因素交织推动收益率持续上行。权益市场强势表现与大宗商品价格上涨形成合力...
当对手都在做下沉 蜜雪冰城旗下... [ 今年5月,蜜雪集团跟巴西签署40亿元人民币的采购意向大单,其中大多数是咖啡豆。 ] 当星巴克、瑞...
新手必看!股指期货交易规则基础... 股指期货交易规则,看似复杂抽象,实则与我们的日常生活有着奇妙的共通之处。它就像一场精心编排的生活交响...
王登发履新茅台技开公司“一把手... 一则微信公众号发布的信息,披露了茅台集团旗下的技术开发公司“一把手”已换人。 近日,南都湾财社-酒水...
特斯拉机器人V3量产版亮相!马... 快科技7月27日消息,特斯拉的Optimus人形机器人V3量产版终于要来了!马斯克在最近的财报电话会...
原创 中... 在金融全球化的浪潮中,中国资本市场始终勇立潮头,不断探索前行。7月26日,中国资本市场学会成立大会暨...
报告:我国经济增长保持韧性 下... 央广网北京7月27日消息(记者 樊瑞)近日,中国金融四十人论坛(CF40论坛)发布《2025年第二季...
超6300亿元!A股银行“分红... 7月25日,成都银行完成权益分派股权登记,将于7月28日发放现金红利,这标志着A股上市银行2024年...
老铺黄金:2025年上半年单个... 7月27日晚,老铺黄金(HK06181)披露2025年中期业绩预告。预计2025年上半年实现销售业绩...
保险行业2025年上半年回顾与... 今天分享的是:保险行业2025年上半年回顾与未来展望 报告共计:59页 2025年上半年保险行业回顾...
数币App上新!消费者、商户两... 数字人民币试点持续推进,相关数字钱包手机应用程序功能也在优化中。7月21日,北京商报记者注意到,日前...
A股热点迭出,个股连续涨停!资... 近段时间以来A股市场整体走势较为强劲,上周以来在雅江概念集体上行的推动下涨势更为明显,主要指数不同程...
原创 印... 令人惊讶的是,印度人开始反思自身制造业的发展状况。印度经济学家帕纳加利亚指出,印度原本有机会在20年...
首创证券拟赴港上市,“A+H”... 首创证券在A股上市不足三年便启动赴港上市计划。近日,首创证券公告称,公司董事会已审议通过了公司拟发行...
肥东杨大爷要帮“儿子”还钱,银... “儿子”在外借了2万元还不上 “要债人”电话直接打了过来 还?还是不还? 7月6日 肥东县公安局梁园...
A股上周16家上市公司公布并购... 转自:扬子晚报 扬子晚报网7月27日讯(记者 范晓林 薄云峰)近段时间以来,A股市场并购重组活跃度持...
独家|某股份行改动零售业务关键... 在资产端信贷“投不动”(多家行零售信贷增速连续几个季度放缓、更有甚者个贷投放负增长)、负债端存款“定...