微前端架构如何改变企业的开发模式与效率提升
512
2022-11-11
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
文章目录
【LeetCode 06】203.移除链表元素
一、题意二、思考过程2.1直接使用原来的链表进行删除2.2设置一个虚拟节点再执行删除操作
step:![](* Definition for singly-linked list. * struct ListNode { * int val;//数据域 * struct ListNode *next;//指针域 * }; */struct ListNode* removeElements(struct ListNode* head, int val){ }
二、思考过程
链表的删除和数组删除不一样;数组是内存是连续的存储空间,没有删除这个说法,只是元素之间的覆盖而已,而链表删除是修改指针即可。如下图:
链表元素的删除、移除主要有两种方式:
直接使用原来的链表进行删除需要单独写逻辑删除头结点设置虚拟头结点进行删除对头结点的删除可以统一操作
2.1直接使用原来的链表进行删除
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* removeElements(struct ListNode* head, int val){ //删除头节点 while(head!=NULL&&head->val==val){ ListNode *tmp=head; head=head->next; free(tmp); } //删除非头节点 ListNode *cur=head; while(cur!=NULL&&cur->next!=NULL){ if(cur->next->val==val){ ListNode *tmp=cur->next; cur->next=cur->next->next; free(tmp); }else{ cur=cur->next; } } return head; }}
2.2设置一个虚拟节点再执行删除操作
设置一个虚拟头节点,这样原来的链表的所有节点都可以按照统一的方式删除了。
step:
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; * typedef struct ListNode { * int val; * struct ListNode *next; * }ListNode;添加即可取消【1】 */struct ListNode* removeElements(struct ListNode* head, int val){ typedef struct ListNode ListNode;//【1】 ListNode *shead; shead=(ListNode*)malloc(sizeof(ListNode)); shead->next=head; ListNode *cur=shead; while(cur->next!=NULL){ if(cur->next->val==val){ ListNode *tmp=cur->next; cur->next=cur->next->next;//关键 free(tmp); }else{ cur=cur->next; } } head=shead->next; free(shead); return head;}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~