原题链接(PTA中)原题链接
struct ListNode* removeElements(struct ListNode* head, int val)
{
struct ListNode *pr,*p;
if(head==NULL) return NULL;//链表一开始就为空
while(head!=NULL && head->val==val)//处理第一个节点(及后面节点)==val时的情况
{
head=head->next;
}
if(head==NULL) return NULL;//少了这句话就不行
p=head;
while(p->next!=NULL )//表中,表尾,一起处理。
{
if(p->next->val==val)
{
pr=p->next;
p->next=pr->next;//这里只是把尾巴跳过去了,else中的头不管,下次直接来判断尾巴,尾巴只要是val就又让尾巴后移动,直到尾巴的值不为val,才让头跳过去。
free(pr);
}
else p=p->next;//头才跳过去,跳到值不为val的结点。
}
return head;
}