个人主页:平行线也会相交
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创
收录于专栏【LeetCode】
🍓希望我们一起努力、成长,共同进步。
题目链接
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例一:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例二:
输入:head = [], val = 1
输出:[]
示例三:
输入:head = [7,7,7,7], val = 7
输出:[]
解题思路:
- 创建两个指针pre和cur,pre指向NULL,cur指向head。
- 对cur进行迭代,如果cur的值等于待删除的值val,则将pre的next指向cur的next,即跳过cur节点。
- 如果cur节点的值不等于待删除的值val,则将pre指向cur,将cur指向cur的next节点继续迭代。
- 最终返回head指针。
解题代码如下:
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,prev就不用管了。
head=cur->next;
free(cur);
cur=head;//注意不要写成cur=cur->next;因为cur已经释放了
}
else
{
prev->next=cur->next;
free(cur);
cur=prev->next;
}
}
}
return head;
}