【例 2-4】查找链表C中是否存在一个值为x的结点,若存在,则删除该结点并返回1,否则返回0。
//核心代码块
int findAndDelete(LNode *B,int x){
LNode *p,*q;
p = B;
while(p->next != NULL){
if(p->next->data == x)
break;
p = p->next;
}
if(p->next == NULL)
return 0;
else{ //删除
q = p->next;
p->next = p->next->next;
free(q);
return 1;
}
}
//完整程序 #include#include #include #define N 15 typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; void init(LinkList &L){ L = (LNode *)malloc(sizeof(LNode)); L->next = NULL; } void show(LinkList &L){ LNode *p; p = L->next; while(p!=NULL){ printf("%d ",p->data); p=p->next; } printf("n"); } void CreateListTail(LinkList &L){ int n,e; LNode *temp = L; printf("以下使用尾插法创建单链表n输入要输入元素的个数n"); scanf("%d",&n); printf("输入%d个元素值n",n); for(int i=0;i LNode *a = (LNode *)malloc(sizeof(LNode)); scanf("%d",&e); a->data = e; temp->next = a; a->next = NULL; temp=temp->next; } } void createlistR(LNode *&B,int a[],int n){ LNode *s,*r; int i; B = (LNode *)malloc(sizeof(LNode)); B->next = NULL; r = B; for(i=0;i s = (LNode *)malloc(sizeof(LNode)); s->data = a[i]; r->next = s; r = r->next; } r->next = NULL; } int findAndDelete(LNode *B,int x){ LNode *p,*q; p = B; while(p->next != NULL){ if(p->next->data == x) break; p = p->next; } if(p->next == NULL) return 0; else{ //删除 q = p->next; p->next = p->next->next; free(q); return 1; } } int main(){ LNode *A; int a[N],x,i; //产生13-63的随机数 srand((unsigned)time(NULL)); for(i=0;i a[i] = rand()%51+13; } createlistR(A,a,N); show(A); printf("输入想要在链表A中查找的值:n"); scanf("%d",&x); int judge = findAndDelete(A,x); if(judge == 1){ printf("%d结点存在n删除%d结点后的链表为:n",x,x); show(A); } else{ printf("%d结点不存在n"); } return 0; }



