链表的个人总结

我犯过的错

  1.寻找尾节点:
 //m为链表结构体指针  p为指向头节点地址的指针  该链表为单向不循环
 1. for(m = p->next; m != NULL; m = m->next) // 此时的m为空,不能进行增删
  
 2. for(m = p; m->next != NULL; m = m->next)//此时的m为尾节点,可以进行增删

  第一种情况,m的任何操作都是对NULL进行的,所以要注意。

  2.清除表的所有数据节点
 //m为链表结构体指针  p为指向头节点地址的指针  该链表为双向循环
 1.错误
    for(m = p; m->next != p;)     //循环进行删除操作,即更改指针指向,再释放空间
  {
  m->next->next->prev = m;
  m->next = m->next->next;
  free(m->next);
  }
  //原因:指针m和指针p都指向头节点的地址,而循环的操作只是m对链表操作,p的指向在m的操作的第一步就没有了
  
  
  2.正确
  for(m = p->next; m != p;m = p->next)     //循环进行删除操作,即更改指针指向,再释放空间
 {
  m->next->prev = p;
  p->next = m->next;
  free(m);
 }

  个人认为:如果是操作 数据 或 数据节点本身,最好调用中间变量去操作数据节点本身,中间变量是防止链表断掉

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值