原题链接:https://leetcode.cn/problems/remove-linked-list-elements/description/
1. 题目描述
2. 思路分析
我们可以定义一个结构体指针变量cur,让cur一开始指向头结点,同时定义一个结构体指针prev,令prev初始化为空指针NULL。
我们使用cur遍历链表,如果当前结点的值和val相等,我们再用if选择语句进行相应操作:
1. 如果cur指向的结点是头结点,我们就让头指针head走到下一个结点(head=cur->next),再free释放掉当前结点cur。再让cur指向此时的头结点(cur=head)。
2. 如果cur指向的结点不是头结点,我们就让prev的next指向cur的next
(prev->next=cur->next)。再free释放掉当前结点cur。再让cur往后走一步
(cur=prev->next)。
如果当前结点的值和val不相等,我们就用prev保存当前结点,让cur往后遍历(cur=cur->next).
3. 代码实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val){
struct ListNode *cur=head,*prev=NULL;
while(cur)
{
if(cur->val==val)
{
if(cur==head)
{
head=cur->next;
free(cur);
cur=head;
}
else
{
prev->next=cur->next;
free(cur);
cur=prev->next;
}
}
else
{
prev=cur;
cur=cur->next;
}
}
return head;
}