刚刚开始,学习一年
单链表的代码,C语言的,
来个哥
帮我写个注释
要详细一点的
谢谢各位帮忙
给大家磕个头
void ListErase(Node** pHead, Node** pos) {//定义了一个没有返回值的函数,有两个形参,一个市Node指针的指针类型pHead,一个是Node的指针的指针类型的pos
assert(pHead);//断言,如果pHead是空的,则触发错误
assert(pos);//断言,如果pos是空的,则触发错误
if ((*pHead)==NULL)//如果pHead指向的第一个指针指针为空
{
printf("链表为空!无法删除!\n");//则输出 链表为空!无法删除! 并换行
}
if (pos==(*pHead))//如果pos与pHead指向的第一个指针相同
{
ListPopFront(pHead);//则执行ListPopFront函数,传入参数为pHead
return;//结束
}
Node* pE = *pHead;//定义一个Node指针pE,并把pHead指向的指针赋给它
while (pE!=NULL)//如果pE是非空指针则进行循环
{
if (pE->_pNext!=NULL)//判断pE的_pNext成员不为空
{
pE->_pNext = pos->_pNext;//则,pE的_pNext成员等于pos的_pNext成员
ListIDestroyNode(&pos);//执行ListIDestroyNode函数,摧毁pos
return;//结束
}
pE = pE->_pNext;//如果pE的_pNext为空,则pE变为pE的_pNext成员(实际就是通过这种方式遍历pE链表)
}
return;//返回
}
//删除结点
void ListErase(Node** pHead, Node* pos)
{
if ((*pHead) == NULL) //如果头指针为NULL直接结束
{
return;
}
if (pos == (*pHead)) //如果要删除的正好是头结点
{
ListPopFront(pHead); //直接将头结点删除
return;
}
Node* pE = *pHead; //将头指针赋值给pE
while (pE != NULL) //当pE指针不为空
{
if (pE->_pNext != NULL) //pE指针的Next(即pE指针指向下一个)不为空
{
pE->_pNext = pos->_pNext; //将欲删除的结点的Next指向 , 赋值给pE指针指向的下一个(解除了想删除结点的Next指向)
ListIDestroyNode(&pos); //删除结点
return;
}
pE = pE->_pNext; //指针指向下一个结点
}
return;
}
能不能贴成代码块,,你贴为图片我这边还要重新打一遍..
输入参数是两个指针,前者是指针的指针,后者是指针
assert()是输入参数检查
然后是一通比较,比较成功的就执行里面,
里面执行完成后,就跳出整个函数,不再执行其它内容