#include<stdio.h>#include<malloc.h>typedef struct node /*定义结点的存储结构*/{ int data; struct node *next;}NODE;NODE *create() /*此函数采用后插入方式建立单链表,并返回一个指向链表表头的指针*/{ NODE *head,*q,*p; /*定义指针变量*/ int a,n; head=(NODE*)malloc(sizeof(NODE)); /*申请新的存储空间,建立表头结点*/ q=head; printf("\nInput number of the list: "); scanf("%d",&n); /*输入单向链表结点个数*/ if(n>0) /*若n<=0,建立仅含表头结点的空表*/ { printf("Input the list :"); while(n>0) { scanf("%d",&a); /*输入新元素*/ p=(NODE*)malloc(sizeof(NODE)); p->data=a; q->next=p; q=p; n--; } } q->next=NULL; return(head); /*返回表头指针head*/}void delete(NODE *head,int x) /*删除链表中的给定元素x*/{ NODE *p,*q; q=head; p=q->next; while((p!=NULL)&&(p->data!=x)) /*查找要删除的元素*/ { q=p; p=p->next; } if(p==NULL) printf("%d not found.\n",x); /*x结点未找到*/ else { q->next=p->next; /*链接x直接后继结点*/ }}main() /*主程序*/{ int x; NODE *a,*b; a=create(); printf("Input x :"); scanf("%5d",&x); delete(a,x); b=a; b=b->next; printf("Output the list:"); while(b!=NULL) { printf("%5d",b->data); /*输出删除x后的单向链表*/ b=b->next; }}