构建一个虚头结点统一所有结点的删除操作
及时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;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。