以下代码可直接运行,运行结果如图:
#include <stdio.h>
#include<stdlib.h>
typedef struct List
{
int e;
struct List *next;
}List;
void initList(List *head)//构建一个长度为输入n的链表,
{
int n,i;
List *p,*q;
printf("how long is the link :");
scanf("%d",&n);//从键盘接收一个整数存储到内存中&n所指的地址,也就是变量n中。
p=head;
for(i=0;i<n;i++)
{
static j=1;//【1】为了在输入前显示,这是第几个输入
q=(List*)malloc(sizeof(List));
if(!q)
return;
printf("number of %d :",j++);//【2】为了在输入前显示,这是第几个输入
scanf("%d",&q->e);//这个链表的值由输入决定
q->next=NULL;
p->next=q;
p=p->next;
}
}
void displayList(List *head)//显示链表的所有值
{
List *p;
for(p=head->next;p;p=p->next)
printf("%d ",p->e );
printf("\n");
}
void destoryList(List *head)//释放一个链表
{
List *p;
while(head->next) {
p=head->next;
head->next=p->next;
free(p);
}
free(head);
}
void insertList(List *head,int x)//在链表末尾添加一个值
{
List *p=head;
while(p->next) {
p=p->next;
}
p->next=(List*)malloc(sizeof(List));
p->next->e=x;
p->next->next=NULL;
}
void deleteList(List *head,int x)//删除所有值为x的结构,如任意值都不是x,则返回No element to delete
{
List *p,*pre;
int flag=1;
for(p=head->next;p;p=p->next)
{
if(p->e==x)
{
pre->next=p->next;
free(p);
p=pre;
flag=0;
}
pre=p;
}
if(flag)
printf("No element to delete!\n");
}
int main()
{
int x;
List *head=(List*)malloc(sizeof(List));//建立头结点
initList(head); //初始化指针
displayList(head);
printf("Input a integer to insert:"); //增加一个结点并显示链表
scanf("%d",&x);
insertList(head,x);
printf("Processed list:");
displayList(head);
printf("Input a integer to delete:");//删除一个结点,并显示链表
scanf("%d",&x);
deleteList(head,x);
printf("Processed list:");
displayList(head);
destoryList(head); //释放一个链表
return 0;
}