/* 若参数不合理,则返回ERROR。 */ {
if( NULL==L || i==0 ) return ERROR; int length=LengthLinkList(L); if( i>length )
return ERROR; LinkList p=L; while(--i>0) p=p->next; p->next=NULL; return OK; }
DS04-PE70 /**********
【题目】试写一算法,删除带头结点单链表中所有值 为x的元素,并释放被删结点空间。 单链表类型定义如下: typedef struct LNode { ElemType data; struct LNode *next; } LNode, *LinkList; **********/
Status DeleteX_L(LinkList L, ElemType x)
/* 删除带头结点单链表L中所有值为x的元素, */ /* 并释放被删结点空间,返回实际删除的元素个数。*/ {
if( NULL==L ) return ERROR; LinkList p; p=L;
int count=0;
if( NULL==L->next ) return count; if(NULL==p->next->next) {
if(x==p->next->data) {
count++;
p->next=NULL; }
return count; }
while(p->next->next) {
if(x==p->next->data)
{
count++;
p->next=p->next->next; } else
p=p->next; }
if(x==p->next->data) {
count++;
p->next=NULL; }
return count; }