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

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

b0352539a88fd574b0c7e79827e00e1b.png

#include 

#include

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

{

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;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值