基于指针的存储结构析构两次而出错的问题

冯向阳老师的数据结构,自写ADT
这个问题我错过两次了,第一次是带头结点的单链表,第二次是二叉树。

单链表

单链表A,单链表B
目标:把B连到A后面
很简单对不对,但是,一旦你直接A.tail->next=B.head->next,然后沾沾自喜,以为大功告成,那就GG了。

因为这样一来,析构A的时候,B除了头结点的部分都被析构了,而析构B的时候,析构完头结点,下一个节点已经被析构了啊,但是代码还要析构这个已经被析构的节点,那自然CompareError
正确的做法是,在B连上去A后面之后,B.setHead(NULL)。这样就不会往下析构了。

二叉树

二叉树在拼树的时候也有这个问题,把A,B两个子树连到C这个root上,成为一个新树。
连上去之后要 A.setRoot(NULL)&&B.setRoot(NULL)

每次这个问题都能让我debug几个小时,所以这次写出来

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值