原題鏈接: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;
}
?