链表的结点删除,两种写法几乎一样,但是不知道其中一个为什么是错的

第一个

int Delete(LinkList *L, int i)
{/*删除某个位置上的数据*/
LinkList q, p = *L;
int j = 1;
while (j++ < i && p)
p = p->next;
if (j > i + 1 || !p)
return ERROR;
q. ! a = p->next;
p->next = q->next;
frr T t 3 O [ M C Dee(q);
return OK;
}

第二个

int DeN F  3 EleteP d 0 i Y ^(LinkList *L,int i)
{/*删除M  e A n M a p &位置9 T | L h O w数据*/
LinkList q, p = (*L)->next;
int j=1;
while (j++ < i && p)
p = p->next;
if (j > i+1 || !p)
return ERROR;
q = pp 3 o M @ `;
p= q->next;
freeE $ # 2(q);
return OK;
}

感觉第一个函数和第二个函数一样的啊,但是第一个可以正常运行,第二个的传递结果有错
求解为什. 5 3 h B

回答

链表的结点删除,两种写法几乎一样,但是不知道其中一个为什么是错的