使用GCC 5.4 测试
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
/** 定义链表的一个节点的结构*/
struct node {
ElemType data; /*数据域*/
struct node *next; /*指针域*/
} ;
typedef struct node *LinkList;//指向结构的指针
typedef struct node LNode;
//创建链表
LinkList CreateLinkList(int n) {
LinkList p,r,list=NULL;
ElemType e;
int i;
for(i=1; i<=n; i++) {
scanf("%d",&e);
p=(LinkList)malloc(sizeof(LNode));
p->data=e;
p->next=NULL;
if(!list) {
list=p;
} else {
r->next=p;
}
r=p;
}
return list;
}
//插入链表
void insertList(LinkList *list,LinkList q,ElemType e) {
LinkList p;//临时链表指针P
p=( LinkList)malloc(sizeof(LNode));// 分配空间。
p->data=e;// 进行数据赋值
// printf ("%d\n",*list) ;
if(!*list) {//如果 list 为空,
*list=p;
p->next=NULL;
} else {//q的指针指向 P,
p->next=q->next;
q->next=p;
}
}
//删除节点
void delLink(LinkList *list ,LinkList q) {
LinkList r;
if(&q==list) {
*list=q->next;
free(q);
} else {
for(r=*list; r->next!=q; r=r->next);
if(r->next!=NULL) {
r->next=q->next;
free(q);
}
}
}
void destroyLinkList(LinkList *list) {
LinkList p,q;
p=*list;
while(p) {
q=p->next;
free(p);
p=q;
}
*list=NULL;
}
int main() {
int e,i;
LinkList l,q;
q=l=CreateLinkList(1); /*创建一个链表结点,q和l指向该结点*/
//创建的第一个节点 , next 节点指向空
// printf ("%d\n",l->data);
scanf("%d",&e);
while(e) { /*循环地输入数据,同时插入新生成的结点*/
insertList(&l,q,e) ;
q=q->next;
scanf("%d",&e);
}
q=l;
printf("The content of the linklist\n");
while(q) { /*输出链表中的内容*/
printf("%d ",q->data);
q=q->next;
}
q=l;
printf("\n删除第五个元素\n");
for(i=0; i<4; i++) { /*将指针q指向链表第5个元素*/
if (q == NULL) {
printf("The length of the linklist is smaller than 5 !");
return;
}
q=q->next;
}
delLink(&l,q); /*删除q所指的结点*/
q=l;
while(q) { /*打印出删除后的结果*/
printf("%d ",q->data);
q=q->next;
}
destroyLinkList(&l); /*释放掉该链表*/
return 0;
}