本关任务:补全 delHas 函数,实现删除链表中包含特定数据的结点,如果有多个这样的结点,只删除第一个。
删除链表的结点时,有时候不知道结点在哪,只知道结点数据的特征,如删除成绩低于60的学生结点、删除学号为20160903的学生等。
#include "linearList.h"
node * delHas(node * h, int n)
{
if (h == NULL) return NULL;
node* a = NULL;
node* b = h;
bool found = false;
for (; b;a = b, b = b->next)
{
if (b->data == n)
{
found = true;
break;
}
}
if (!found) return h;
if (a == NULL)
{
node* cpy = b->next;
delete b;
return cpy;
}
else
{
a->next = b->next;
delete b;
return h;
}
}