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: []
Constraints:
- The number of nodes in the list is in the range [0, 104].
- 1 <= Node.val <= 50
- 0 <= val <= 50
Solution
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val){
struct ListNode *p = (struct ListNode *)malloc(sizeof(struct ListNode));
p->next = head;
struct ListNode *q;
head = p;
while (p->next != NULL) {
if (p->next->val == val) {
q = p->next;
p->next = q->next;
free(q);
} else {
p = p->next;
}
}
p = head;
head = head->next;
free(p);
return head;
}
传入的链表是不带头结点的,可以先创建一个头结点接上去,最后传出的时候不带上那个节点即可。
然后就对 p->next 作判断,这样才能删除元素。