C语言链表删除数据的问题,求助!

2025-02-23 09:07:39
推荐回答(1个)
回答1:

不知你这代码是哪找的,应该都有问题
1、就算代码能删除链表中的元素,但如果要删除链表的第一个元素,这个代码肯定有问题
2、内存泄露
void Delete(struct List *r,int n)
{
int i=1;
struct List *p,*q;
q=r;
p=(struct List *)malloc(sizeof(struct List));//这里申请的空间没有释放!!!其实,这里根本就没必要申请空间,改变链接就可以了
while(q->next &&i {
q=q->next ;
i++;
}
if(!(p->next )||(i>n-1))
printf("删除位置出错!");
p=q->next ;//因为这里改变p指向的位置,所以上面的空间没有释放!!!
q->next =p->next ;
free(p);

}

//我写了个,不知道是不是你要的那种意思
//关于结构体和链表,《C和指针》讲的特别详细
LIST* DeleteItem(LIST* pHead,int pos)
{

LIST* pPrevious = NULL;
LIST* pRemove = pHead;
LIST* pTemp;

//找到要删除的元素
pos --;
while(pRemove && pos)
{
pPrevious = pRemove;
pRemove = pRemove->pNext;
pos --;
}

if(NULL == pRemove)
{
printf("位置错误\n");
return pHead;
}

//删除元素
if(NULL == pPrevious)
{
pTemp = pHead->pNext;
free(pHead);

}
else
{
pTemp = pHead;
pPrevious->pNext = pRemove->pNext;
free(pRemove);
}

return pTemp;}