先建立链表(代码在最后)
一、链表中删除第i个结点
int main()
{
int i;
Node *p,*head,*k;
head=setlink();
scanf("%d",&i);
int v=1;
for(p=head->next;p!=NULL;k=p,p=p->next)
{
if(v==i)break;
else{
v++;
}
}
k->next=p->next;
delete(p);
for(p=head->next;p!=NULL;p=p->next)
printf("%d ",p->id);
return 0 ;
}
二、删除与链表中与a相同的结点
int main()
{
int a;
Node *p,*q,*heada,*k;
heada=setlink();
scanf("%d",&a);
for(p=heada->next;p!=NULL;k=p,p=p->next)
{
if(p->id==a)
{
q=p;
k->next=p->next;
p=k->next;
delete(q);
}
}
for(p=heada->next;p!=NULL;p=p->next)
printf("%d ",p->id);
return 0 ;
}
三、删除链表中重复元素
int main()
{
Node *p,*q,*heada,*k,*ptr;
heada=setlink();
for(p=heada->next;p!=NULL;p=p->next)
{
k=p;
for(q=p->next;q!=NULL;k=q,q=q->next)
{
if(p->id==q->id)
{
ptr=q;
k->next=q->next;
q=k;
free(ptr);
}
}
}
for(p=heada->next;p!=NULL;p=p->next)
printf("%d ",p->id);
return 0 ;
}