while((p->data<data)&&(p->next!=NULL))
{
ptr=p;
p=p->next;
i++;
}
if(p->data==data)
{
if(p==L)
{
L=L->next;
free(p);
}
else
{
ptr->next=p->next;
free(p);
}
printf("删除成功,你所找到的是%d个节点\n",i);
}
else
{
printf("未能找到节点\n");
}
谁能帮我解决一下 ??
1,if(p==L)是什么意思?
2 ,L=L->next ???
3,后面引入ptr是为什么??
1,if(p==L)表示删除的单链表的表头
2 ,L=L->next :表示将单链表的表头删除之后,重置链表指针
3,后面引入ptr:p是ptr的下一个链表成员的指针,将成员删除使,为了确保链表不中断,必须将ptr->指向p->next,然后将p指向的元素删除
补充一下,做单链表的题,必须考虑三个成员:previous,current,next
代码贴全一点
void DeleteList(LinkList L,int data)
{
int i=0;
Node *s,*p,*ptr;
s=(Node *)malloc(sizeof(Node));
p=L;
s->data=data;
if(L==NULL)
{
printf("线性表为空\n");
return ;
}
while((p->data<data)&&(p->next!=NULL))
{
ptr=p;
p=p->next;
i++;
}
if(p->data==data)
{
if(p==L)
{
L=L->next;
free(p);
}
else
{
ptr->next=p->next;
free(p);
}
printf("删除成功,你所找到的是%d个节点\n",i);
}
else
{
printf("未能找到节点\n");
}
}
不好意思