---
# System prepended metadata

title: Leetcode 203. Remove Linked List Elements
tags: [Leetcode]

---

# Leetcode 203. Remove Linked List Elements
###### tags: `Leetcode`

題目 
Given the head of a linked list and an integer val, remove all the nodes of the linked list that has Node.val == val, and return the new head.

 

Example 1:


Input: head = [1,2,6,3,4,5,6], val = 6
Output: [1,2,3,4,5]
Example 2:

Input: head = [], val = 1
Output: []
Example 3:

Input: head = [7,7,7,7], val = 7
Output: []

解法:
1.主要判斷的就是當下val是否有等於val，設定一個pre跟一個cur指標
2.再來就是第一個他沒有pre怎麼辦，自己多加一個在他前面，struct ListNode* tmp，tmp->next = head，讓pre = tmp; cur = head
3.記得最後要回傳的是pre->next，因為pre是自己多加的，真正的開頭是pre->next


＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

```

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* removeElements(struct ListNode* head, int val){
    /*
    if(head == NULL)
        return NULL;
    struct ListNode* tmp = malloc(sizeof(struct ListNode));
    tmp->next = head;
    
    struct ListNode* pre = tmp;
    struct ListNode* cur = head;
    while(cur != NULL)
    {
        if(cur->val == val)
            pre->next = cur->next;
        else
            pre = cur;
        cur = cur->next;  
    }
    return tmp->next;
    */
    
    
    if(head == NULL)
        return NULL;
    if(head->val == val) return removeElements(head->next, val);
    else head->next = removeElements(head->next, val);
    return head;
    
}
```