🌈 个人主页:白子寰
🔥 分类专栏:python从入门到精通,魔法指针,进阶C++,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~
💡 坚持创作博文(平均质量分82+),分享更多关于深度学习、C/C++,python领域的优质内容!(希望得到您的关注~)
目录
题目要求
示例
解法一:双指针
思路
图解
①pcur = val且是phead=val
②链表中元素 != val
③(除首元素之外的元素)其他元素=val
代码
解法二:尾插不是val的元素到新链表
思路
图解
代码
【力扣】-- 移除链表元素
移除链表元素https://leetcode.cn/problems/remove-linked-list-elements/
题目要求
给你一个链表的头节点
head
和一个整数val
,请你删除链表中所有满足Node.val == val
的节点,并返回 新的头节点 。
示例
解法一:双指针
思路
创建两个指针 pcur 和 prev , pcur=head, prev为空指针,使用while语句 pcur 遍历链表,有以下三种情况👇,最后返回新的节点head
图解
①pcur = val且是phead=val
②链表中元素 != val
③(除首元素之外的元素)其他元素=val
代码
typedef struct ListNode LTNode;
struct ListNode* removeElements(struct ListNode* head, int val)
{
LTNode* prev = NULL,*pcur = head;
while(pcur)
{
//首元素=val
if(pcur->val == val)
{
if(pcur == head)
{
head = pcur->next;
free(pcur);
pcur = head;
}
//其他元素=val
else
{
prev->next =pcur->next;
free(pcur);
pcur = prev->next;
}
}
//链表元素 != val
else
{
prev = pcur;
pcur = pcur->next;
}
}
return head;
}
解法二:尾插不是val的元素到新链表
思路
新创建两个指针 newhead 和 newtail, 并初始化为NULL;
在while循环下用pcur遍历原链表
在pcur->val!=val的情况下
①newhead != NULL
②newhead==NULL
如下图👇
最后结尾newtail的下一个节点置为空
图解
代码
typedef struct ListNode LTNode;
struct ListNode* removeElements(struct ListNode* head, int val) {
LTNode* newhead,*newtail;
newhead = newtail = NULL;
LTNode* pcur = head;
while(pcur)
{
if(pcur->val != val)
{
if(newhead == NULL)
{
newhead = newtail = pcur;
}
else
{
newtail->next = pcur;
newtail = newtail->next;
}
}
pcur = pcur->next;
}
if(newtail)
{
newtail->next = NULL;
}
return newhead;
}
***********************************************************分割线*****************************************************************************
完结!!!
感谢浏览和阅读。
等等等等一下,分享最近喜欢的一句话:“保持热爱,奔赴下一场山海”。
我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我持续写作的动力!!!
好了划走吧。