目录
题目
解法一:迭代
struct ListNode* delete(struct ListNode* head, int val)
{
struct ListNode* virHead = malloc(sizeof(*virHead));
virHead->next = head;
struct ListNode* curNode = virHead;
while (curNode->next)
{
struct ListNode* freeNode = curNode->next;
if (freeNode->val == val)
{
curNode->next = freeNode->next;
free(freeNode);
}
else
curNode = curNode->next;
}
struct ListNode* retHead = virHead->next;
free(virHead);
return retHead;
}
struct ListNode* removeElements(struct ListNode* head, int val)
{
return delete(head, val);
}
解法二:递归
struct ListNode* delete(struct ListNode* head, int val)
{
if (!head)
return head;
struct ListNode* nextNode = delete(head->next, val);
if (head->val == val)
{
free(head);
head = nextNode;
}
else
head->next = nextNode;
return head;
}
struct ListNode* removeElements(struct ListNode* head, int val)
{
return delete(head, val);
}