题目:要求从终端输入一组整数(大于10个数),以0作为结束标志,将这一组整数放在一个链表中(结束标志0不包括在内),打印出该链表中的值。然后删除该链表中的第5个元素,打印出删除后的结果。最后在内存中释放掉该链表。
程序代码:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef int ElemType;
typedef struct node{
ElemType data;
struct node *next;
}LNode,*LinkList;
LinkList CreatLinkList(int n){ //返回一个指向链表头的指针
LinkList p1,p2,head=NULL;
ElemType e;
int i;
for(i=1;i<=n;i++){
scanf("%d",&e);
p1=(LinkList)malloc(sizeof(LNode));
p1->data=e;
p1->next=NULL;
if(!head)
head=p1;
else
p2->next=p1;
p2=p1;
}
return head;
}
void insertList(LinkList *head,LinkList q,ElemType e){ //链表的插入操作
LinkList p; // q为插入的位置,e为插入的值
p=(LinkList)malloc(sizeof(LNode));
p->data=e;
if(!head){ //判断链表为空的时候
*head=p;
p->next=NULL;
}
else{ //将节点插入链表
p->next = q->next;
q->next = p;
}
}
void delLink(LinkList *head,LinkList q){ //链表的删除操作
LinkList r;
if(q==head){ //如果删除第一个节点
*head = q->next;
free(q);
}
else{ //删除其他节点
for(r=*head;r->next!=q;r=r->next);
if(r->next!=NULL){
r->next = q->next;
free(q);
}
}
}
void destroyLinkList(LinkList *head){ //链表的销毁操作
LinkList p,q;
p=*head;
while(p){
q=p->next;
free(q);
p=q;
}
*head = NULL;
}
int main(int argc, char *argv[]) {
int e,i;
LinkList head,p;
head=p=CreatLinkList(1);
scanf("%d",&e);
while(e){
insertList(&head,p,e);
p=p->next;
scanf("%d",&e);
}
p=head;
printf("The content of the linklist is:\n");
while(p){
printf("%d ",p->data);
p=p->next;
}
p=head;
printf("\nDelete the fifth element:\n");
for(i=0;i<4;i++){
p=p->next;
}
delLink(&head,p);
p=head;
while(p){
printf("%d ",p->data);
p=p->next;
}
destroyLinkList(&head);
return 0;
}
运行结果: