#include <stdio.h>#include <stdlib.h>#define INIT_LEN 6typedef struct node{ int x; struct node * next;}link;link * initLink(link * head){ link * pr = head, *p; int i, num; printf("输出数组%d个元素的值。\n", INIT_LEN); for(i = 0;i < INIT_LEN;i++){ //create node p = (link*)malloc(sizeof(link)); if(p == NULL) exit(EXIT_FAILURE); scanf("%d", &num); p->x = num; p->next = NULL; //link node pr->next = p; pr = p; } return head;}link * deleteLink(link * head, int num){ link * p = head->next, *pr = head; while(p != NULL){ //带头结点的删除 if(p->x == num) break; pr = p; p = p->next; } if(p == NULL){ printf("NOT FOUND!\n"); }else{ pr->next = p->next; p->next = NULL; free(p); } return head;}link * insertLink(link * head, int num){// 带头结点的程序插入 //create node link * pt = (link*)malloc(sizeof(link)); if(pt == NULL) exit(EXIT_FAILURE); pt->x = num; pt->next = NULL; if(head == NULL) head = pt; link * p = head; while(p->next != NULL && p->next->x < num) p = p->next; //when p->next->x >= num pt->next = p->next; p->next = pt; return head;}void printLink(link * head){ link * p = head->next; //头结点内容不输入 while(p != NULL){ printf("%d ",p->x); p = p->next; } printf("\n");}void destoryLink(link * head){ link * p = head; while(p != NULL){ head = p->next; free(p); p = head; }}int main() { int cnt, del, add; link * head = (link*)malloc(sizeof(link)); // 带头结点// head = initLink(head); printf("此链表各个结点的数据域为:"); printLink(head); printf("输出要插入的数据个数:"); scanf("%d",&cnt); printf("输出要插入的数据x: "); for(int i = 0;i < cnt;i++){ scanf("%d", &add); insertLink(head, add); } printf("以后链表各个结点的数据域为:"); printLink(head); printf("输出要删除的数据x: "); scanf("%d", &del); deleteLink(head, del); printf("删除后链表各个结点的数据域为:"); printLink(head); destoryLink(head); return 0; }