移除链表元素
1°题目链接
2°思路
单链表的删除
不是这个值
就往后走
是这个值
考虑头删的情况
如果是头删
把头部的下一个变为新的头部
如果不是头删
找到上一个和下一个
把上一个和下一个进行连接
最后free
单链表的增删查改可见:
#3单链表的实现#_努力的小恒的博客-CSDN博客
3°实现
struct ListNode* removeElements(struct ListNode* head, int val)
{
struct ListNode* prev = NULL, *cur = head;
while (cur)
{
if (cur->val == val)
{
//头删 没有prev prev为空指针 空指针解引用非法访问
if (cur == head)
{
//把第二个变成头部
head = cur->next;
//删除第一个
free(cur);
//再把第二个变为cur
cur = head;
}
else
{
//先指向下一个
prev->next = cur->next;
//删除
free(cur);
//再把cur变为删除的下一个
cur = prev->next;
}
}
else
{
//迭代往后走
prev = cur;
cur = cur->next;
}
}
return head;
}
4°运行结果
#6移除链表元素#完