构建一个虚头结点对立所有结点的删除操作
及时 free 好习惯
移除链表元素
给你一个链表的头节点 head 和一个整数 val,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetb…
起源:力扣(LeetCode)
题解作者:WildDuck
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode* ListNode_pointer;
struct ListNode* removeElements(struct ListNode* head, int val)
{
// 手动构建头结点,将删除 elem 的操作对立
ListNode_pointer save_head = head;
ListNode_pointer free_pointer = NULL;
ListNode_pointer temp_head = (ListNode_pointer)malloc(sizeof(struct ListNode));
ListNode_pointer save_temp_head = temp_head;
temp_head -> next = head;
while(head != NULL)
{if(head->val != val)
{
temp_head = temp_head->next;
head = head->next;
}
else if(head->val == val)
{
temp_head -> next = head->next;
free_pointer = head;
head = head->next;
free(free_pointer);
}
}
free_pointer = save_temp_head;
save_temp_head = save_temp_head->next;
free(free_pointer);
return save_temp_head;
}