/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
#include<assert.h>
void Eoeeor(struct ListNode** head,struct ListNode* ps)
{
assert(head);
assert(ps);
//1.一个结点时
if((*head)->next == NULL)
{
*head = NULL;
}
//2.头节点与第一个结点相等且后面还有数据时
else if((*head)->next != NULL && (*head) == ps)
{
*head = ps->next;
}
//3.多节点时
else
{
struct ListNode* p = *head;
while(p->next != ps)
{
p = p->next;
}
p->next = ps->next;
}
}
struct ListNode* removeElements(struct ListNode* head, int val)
{
struct ListNode* ps = head;
while(ps != NULL)
{
if(ps->val == val)
{
Eoeeor(&head,ps);
}
ps = ps->next;
}
return head;
}
其解题思路与指定删除某块空间一致,但要注意,这里只需将数据与数据之间连接地址改变即可,
不需要free.