c语言链表代码大全,[编程入门]链表之节点删除 (C语言代码)

解题思路:

1)首先先给链表取长度

2)给两个链表的各个节点赋值

3)查找a链表中与b链表学号相同的节点进行释放节点

4)遍历a链表中的所有数据

注意事项:

1)再给链表释放的过程中注意利用临时变量保存好链表的下一个节点的地址,以免发生不必要的错误

2)链表释放过程中要考虑各种边界条件(比如:链表头)。

参考代码:#include

#include

typedef struct Student {

int id;   //学号

int score;  //成绩

struct s_a *Next;

} sa, sb;

int main() {

int id, score, n, m, i;

sa *heada = NULL;

sb *headb = NULL;

scanf("%d%d", &n, &m);                                           //两个链表的长度

/************************************************************///链表a赋值

for( i=1; i<=n; i++) {

sa *pa = (sa*)malloc(sizeof(sa));

scanf("%d%d", &id, &score);

pa->id = id;

pa->score = score;

pa->Next = NULL;

sa *lasta = heada;

if(lasta) {

while(lasta->Next) {

lasta = lasta->Next ;

}

lasta->Next = pa;

} else {

heada = pa;

}

}

/************************************************************///链表b赋值

for( i=1; i<=m; i++) {

sb *pb = (sb*)malloc(sizeof(sb));

scanf("%d%d", &id, &score);

pb->id = id;

pb->score = score;

pb->Next = NULL;

sb *lastb = headb;

if(lastb) {

while(lastb->Next ) {

lastb = lastb->Next ;

}

lastb->Next = pb;

} else {

headb = pb;

}

}

/************************************************************///查找相同学号并释放链表

sa *ta = heada;

sb *tb = headb;

for( tb; tb; tb=tb->Next ){

ta = heada;

sa *qa; //临时变量

for( ta, qa=NULL; ta; qa=ta, ta=ta->Next ){

if(ta->id == tb->id ){

if(qa){

qa->Next = ta->Next ;

} else {

heada = ta->Next ;

}

free(ta);

n--;

break;

}

}

}

/************************************************************///遍历显示

ta = heada;

printf("%d\n", n);

for( ta; ta; ta=ta->Next ) {

printf("%d %d\n", ta->id ,ta->score  );

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值