移除链表元素
分析:
可以用双指针来解决此问题,一个指针用来遍历(cur),一个指针用来记录前一个节点(prev)
思路:若cur不为要删除的节点,就向后迭代。若为要删除的节点,就删除,删除的时候要考虑是否为头删
迭代:
头删:
删除:
struct ListNode* removeElements(struct ListNode* head, int val)
{
struct ListNode* cur = head,* prev = NULL;
while(cur)
{
if(cur->val != val)//当前节点不是要删除节点
{
//两个指针向后迭代
prev=cur;
cur=cur->next;
}
else//当前节点为要删除节点
{
if(prev==NULL)//头删
{
head=head->next;//头节点向后遍历一个
free(cur);//释放空间
cur=head;//cur向后遍历
}
else //正常删除
{
cur=cur->next;//cur向后迭代
free(prev->next);//释放prev链接的节点
prev->next=cur;//prev链接cur
}
}
}
return head;
}