链表的建立以及增加、删除结点的C语言完整代码

以下代码可直接运行,运行结果如图:

092701_UW7X_2489903.png

#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;
}

 

转载于:https://my.oschina.net/bovinitwo/blog/528327

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值