链表面试题 LeetCode203. 移除链表元素

大家好!从这篇开始讲一些单链表的题!
链表面试题 LeetCode203. 移除链表元素_第1张图片
难度.简单 OJ链接
链表面试题 LeetCode203. 移除链表元素_第2张图片
在这里,我们要分三种情况:
第一种:常规情况
在这里插入图片描述
我们可以定义一个prev和cur,当cur->val==val时,我们就将val删除,然后将prev->next指向下一个节点。
链表面试题 LeetCode203. 移除链表元素_第3张图片

第二种:连续情况
在这里插入图片描述
我们用常规方法也可以解决这种连续的情况。
链表面试题 LeetCode203. 移除链表元素_第4张图片
第三种:开头情况
在这里插入图片描述
但常规方法解决不了,这种开头情况,因为我们的头指针要发生变化。
链表面试题 LeetCode203. 移除链表元素_第5张图片
当我们把头指针处理好之后,我们再按照常规方法去做。

代码如下:

struct ListNode* removeElements(struct ListNode* head, int val){
        struct ListNode* cur=head;
        struct ListNode* prev=NULL;

        while(cur)
        {
            if(head->val==val)
            {
                head=head->next;
                free(cur);
                cur=head;
            }
           else if(cur->val==val)
            {
                prev->next=cur->next;
                free(cur);
                cur=prev->next;
            }
            else
            {
                prev=cur;
                cur=cur->next;
            }
        }

        return head;
}

这里,我们不传二级指针的原因是因为我们返回的是头指针。

好了,这篇文章就到这里,这道题挺简单的,就是要注意开头问题。

链表面试题 LeetCode203. 移除链表元素_第6张图片

你可能感兴趣的:(题目练习,数据结构,leetcode,c语言)