请问这是通过什么知识点实现删除学生的?是链表还是指针?能说说具体原理吗?

void _function::Delete(void)//删除
{ string nname;
system("cls");
cout<<"请输入需要删除的同学姓名:"<<endl;
cin>>nname;
int k=0;
student *p = first;
student *pre = first;
while(p->next)
{ pre=p->next;
if(pre->name == nname)
{ p->next=pre->next;
k=1;
delete pre; }
p=p->next; }
if(k==0&&p->name!=nname) cout<<"记录为空!"<<endl;
else { student::person--;
if(p->sex=="男") student::man--;
if(p->age>=18) student::adult--; } int i;
cout<<endl;cout<<endl;cout<<endl;
cout<<"按任意键继续"<<endl;
i = getch();}

-