用vs做网站后台,网站域名设计方案,wordpress主题错误检测,佛山网站营销推广#x1f381;个人主页#xff1a;我们的五年
#x1f50d;系列专栏#xff1a;每日一练
#x1f337;追光的人#xff0c;终会万丈光芒 前言#xff1a; 该题是数据结构#xff0c;单链表的一道基本题#xff0c;刚刚准备学习数据结构#xff0c;或者正在学习数据结…个人主页我们的五年
系列专栏每日一练
追光的人终会万丈光芒 前言 该题是数据结构单链表的一道基本题刚刚准备学习数据结构或者正在学习数据结构的可以学习一下。 题目链接203. 移除链表元素 - 力扣LeetCode 最后喜欢的铁子们可以三连谢谢大家的支持祝大家天天开心 目录 目录
1.问题描述
编辑
1.题目描述
2.示范用例
2.实现代码
3.代码分析
步骤一
步骤二
步骤三
❗️注意
总结 1.问题描述 1.题目描述 给你一个链表的头节点 head 和一个整数 val 请你删除链表中所有满足 Node.val val 的节点并返回 新的头节点 。 2.示范用例 2.实现代码 LeetCode以函数的形式给出 节点结构体 struct ListNode{ int val; struct ListNode* next; }; 传递也是传递的是指向头节点的指针 typedef struct ListNode ListNode; //重定义struct ListNode
struct ListNode* removeElements(struct ListNode* head, int val) {//对链表进行判空处理if(headNULL)return head;//定义新节点的头和尾一开始头节点等于尾节点//定义头节点可以把后面不等于val的节点直接进行尾插不要进行判空处理。ListNode *NewHead,*NewTail;NewHeadNewTail(ListNode*)malloc(sizeof(ListNode));//pcur指针对原链表进行遍历ListNode *pcurhead;while(pcur){//对满足题意的节点进行尾插NewTail每次尾插要记得往后面移动if(pcur-val!val){NewTail-nextpcur;NewTailNewTail-next;}//pcur每次都向后进行移动pcurpcur-next;}//最后如果尾节点的next指针不为NULL那么需要我们自己去置为NULL//不然又会和后面的节点进行关联if(NewTail-next)NewTail-nextNULL;//最后返回头结点的next指针NewHeadNewHead-next;return NewHead;
}
3.代码分析 步骤一 if(headNULL) return head; 先对节点进行判空处理因为节点数目可能为0,如果head为NULL那么直接返回head。 如果不进行判空处理后面可能会对NULL进行解应用出现错误。 步骤二 ListNode *NewHead,*NewTail; NewHeadNewTail(ListNode*)malloc(sizeof(ListNode)); 然后创建一个头节点一个尾节点。通过NewHead-next我们可以找到第一个节点然后返回这一个节点。NewTail是每次尾插时要用到的在尾插的过程中我们把NewTail的next 指针置为指向新插入的节点的指针然后让NewTail变为新插入的节点。 这样先申请一个黑头节点我们就不要对新的头节点进行判空处理了。 步骤三 ListNode *pcurhead; while(pcur) { //对满足题意的节点进行尾插NewTail每次尾插要记得往后面移动 if(pcur-val!val) { NewTail-nextpcur; NewTailNewTail-next; } //pcur每次都向后进行移动 pcurpcur-next; } 改循环就是对节点val的值进行判断然后进行尾插的一个过程如果符合题意的节点我们就尾插把NewTail的next变为pcur新的NewTail变为pcur。 pcur一直进行往后遍历。 ❗️注意 上面三个步骤完成以后这题差不多就完成但是把上面的代码直接提交我们会发现没有通过 这是因为我们没有对尾节点的next进行处理如果我们不进行处理那么如果尾节点的next不是NULL这样还是会与后面的节点进行关联所以测试用例才会多出一个6. if(NewTail-next) NewTail-nextNULL; 但是如果我们在尾节点加上这样一句话我们就可以避免这种情况不要多输出后面的节点。 NewHeadNewHead-next; 最后我们返回NewHead的next指针也就是满足题意的第一个节点就可以通过题目用例了。 因为开始我们动态申请了一块空间我们也可以先保存第一个节点释放以后再进行return操作。 总结
谢该题时我们如果只是对空间情况进行考虑是远远不够的我们还需要对头部2进行分析对尾部进行分析这样我们能尽可能的满足题目要求不会出现其他小的错误。
最后我也会把也会我不会的题目或者我觉得值得重点关注的问题在我的博客进行分享希望大家可以多多支持