首页 > 试题广场 >

设计在无头结点的单链表中删除第i个结点的算法。

[问答题]
设计在无头结点的单链表中删除第i个结点的算法。
算法思想为:
(1)应判断删除位置的合法性,当i<0或i>n-1时,不允许进行删除操作;
(2)当i=0时,删除第一个结点:
(3)当0<i<n时,允许进行删除操作,但在查找被删除结点时,须用指针记住该结点的前趋结点。算法描述如下:
delete(LinkList *q,int i)
{  //在无头结点的单链表中删除第i个结点
LinkList  *p,*s;
int  j;
if(i<0)
printf("Can't delete");
else if(i= =0)
{  s=q;
q=q->next;
free(s);
}
else
{  j=0; s=q;
while((j<i) && (s! = NULL))
{  p=s;
s=s->next;
j++;
}
if (s= =NULL)
printf("Cant't  delete");
else
{   p->next=s->next;
free(s);
}
}
}
发表于 2017-07-31 14:02:34 回复(0)