链表代码修改
代码如下:
struct LinkNode
{
int data;
struct LinkNode *pnext;
};
typedef struct LinkNode node; //简化类型
void add_head(node *pphead, int data)//头部添加节点,返回头节点
{
node pnew = malloc(sizeof(node));//新节点
pnew->data = data;
pnew->pnext = NULL; //赋值
if (*pphead == NULL)
{
*pphead = pnew;//直接链接
}
else
{
pnew->pnext = *pphead;
*pphead = pnew;
}
}
node* deletefirst(node* phead, int finddata)//删除
{
node* p1=NULL, * p2=NULL;
int xx = 0;
p1 = phead; //保存头节点
while (p1 != NULL)
{
if (p1->data != finddata)//头节点开始找
{
p2 = p1;//保存p1上一个位置
p1 = p1->pnext;//向前移动
}
else
{
if (p1 != phead)
{
p2->pnext = p1->pnext; //跳过p1
free(p1);
}
else
{
phead = phead->pnext; //头部删除
free(p1);
}
break;
}
}
return phead;
}
对于节点插入请参考节点删除的格式即可,把删除和插入都在break之前执行就好了,这样子删除和插入无效的就跳过不会报错了。