1. #include<stdio.h>
    2. #include<malloc.h>
    3. typedef struct node /*定义结点的存储结构*/
    4. {
    5. int data;
    6. struct node *next;
    7. }NODE;
    8. NODE *create() /*此函数采用后插入方式建立单链表,并返回一个指向链表表头的指针*/
    9. {
    10. NODE *head,*q,*p; /*定义指针变量*/
    11. int a,n;
    12. head=(NODE*)malloc(sizeof(NODE)); /*申请新的存储空间,建立表头结点*/
    13. q=head;
    14. printf("\nInput number of the list: ");
    15. scanf("%d",&n); /*输入单向链表结点个数*/
    16. if(n>0) /*若n<=0,建立仅含表头结点的空表*/
    17. {
    18. printf("Input the list :");
    19. while(n>0)
    20. {
    21. scanf("%d",&a); /*输入新元素*/
    22. p=(NODE*)malloc(sizeof(NODE));
    23. p->data=a;
    24. q->next=p;
    25. q=p;
    26. n--;
    27. }
    28. }
    29. q->next=NULL;
    30. return(head); /*返回表头指针head*/
    31. }
    32. void delete(NODE *head,int x) /*删除链表中的给定元素x*/
    33. {
    34. NODE *p,*q;
    35. q=head;
    36. p=q->next;
    37. while((p!=NULL)&&(p->data!=x)) /*查找要删除的元素*/
    38. {
    39. q=p;
    40. p=p->next;
    41. }
    42. if(p==NULL)
    43. printf("%d not found.\n",x); /*x结点未找到*/
    44. else
    45. {
    46. q->next=p->next; /*链接x直接后继结点*/
    47. }
    48. }
    49. main() /*主程序*/
    50. {
    51. int x;
    52. NODE *a,*b;
    53. a=create();
    54. printf("Input x :");
    55. scanf("%5d",&x);
    56. delete(a,x);
    57. b=a;
    58. b=b->next;
    59. printf("Output the list:");
    60. while(b!=NULL)
    61. {
    62. printf("%5d",b->data); /*输出删除x后的单向链表*/
    63. b=b->next;
    64. }
    65. }