c
#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;
}
}