c语言用删除单链表中值为m的节点,用C语言编写一个使用递归算法实现删除单链表中值为X的第一个节点与所有节点?...

匿名用户

1级

2013-11-14 回答

#include

#include

typedef struct node

{

char data;

struct node* next;

}Lnode;

Lnode *head=NULL;

Lnode *tail=NULL;

void create()

{

head = (Lnode*)malloc(sizeof(Lnode));

tail = head;

if(head!=NULL)

{

printf("please input data: ");

scanf(" %c",&head->data);

head->next=NULL;

}

}

void delFirst(Lnode *pre ,Lnode *ptr,char x) //递归删除第一个 = x

{

if(ptr==NULL)

return;

if(pre==NULL && ptr->data == x)

{

head=ptr->next;

ptr->next = NULL;

free(ptr);

ptr=NULL;

return;

}

if(pre!=NULL && ptr->data == x)

{

pre->next = ptr->next;

ptr->next = NULL;

free(ptr);

ptr = NULL;

return;

}

pre = ptr;

ptr = ptr->next;

delFirst(pre,ptr,x);

}

void delAll() //递归删除所有

{

Lnode * tmp=NULL;

if(head==NULL)

return;

if(head->next!=NULL)

{

tmp = head->next;

free(head);

head=tmp;

delAll();

}

else

{

free(head);

head=NULL;

}

}

void insert()

{

if(tail == NULL)

return;

tail->next = (Lnode*)malloc(sizeof(Lnode));

if(tail->next != NULL)

{

printf("please input data: ");

scanf(" %c",&(tail->next->data));

tail=tail->next;

tail->next=NULL;

}

}

void print()

{

Lnode* tmp =head;

if(head==NULL)

printf("no data\n");

while(tmp!=NULL)

{

printf("%c ",tmp->data);

tmp=tmp->next;

}

}

void lfree() //非递归删除

{

Lnode* tmp=NULL;

while(head!=NULL)

{

tmp=head;

head=head->next;

free(tmp);

}

}

void main()

{

int i=0;

create();

for(i=0; i<5; i++)

{

insert();

}

delFirst(NULL,head,'1');

print(head);

delAll();

print(head);

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值