问题
问答题
设计在无头结点的单链表中删除第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)
print{(“Cant’t delete”);
else
{p->next=s->next;
free(s):
}
}