数据结构之链表(递归时函数引用调用对节点的作用)

更新

今天发现,只有递归时才能用下面的方法直接对链表节点进行修改,因为递归时不会不停地lnode->next,而是通过函数调用fuc(lnode->next),但普通循环时,不断地lnode->next,会使其不断的变化。

以下是原文章

我们都知道c++中函数有&引用,今天学数据结构的链表时发现一个问题。链表是有数据域和指针域的,如果一个函数的参数包含链表节点,并且是引用调用的时候,对链表节点的修改会改变链表本身,这是肯定的,这是引用调用的作用。但是有一个问题我之前没有弄清楚,就是某一个链表节点lnode,肯定是有前驱节点的,前驱节点的next指针是指向当前这个lnode的首地址的,但是将lnode修改时,比如lnode = lnode->next,此时看似只是改变了lnode,其前驱节点的next指针好像还是指向原来的地址,因为根本没有涉及到前驱节点的next指针。
但是我在vs2019里试了一下,用单步调试,观察整个链表,发现在lnode = lnode->next之后,其前驱节点的next会随之改变为lnode->next的首地址,也就是说lnode本身修改时,其前驱节点会跟着next过去,而不是指向原来的地址,而原来的地址还是存在的,只不过不会指过去。所以如果要删除某个节点,可以令一个新的节点p = lnode,然后对lnode进行操作,之后直接free(p),就会将之前的lnode直接删掉了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值