关于链表的remove操作

来源:1-5 从链表中删除元素

Corrots521

2020-07-28 11:02:10

波波老师,链表的remove这里,对于删除的节点,你的代码中只是将delNode.next = NULL,最后将delNode.e作为返回值返回,这里是不是可以先将delNode.e保存起来,然后将delNode整个置空呢?这样是不是更利于gc呢?

下面是我用go实现的:

func (l *LinkedList) Remove(index int) interface{} {
   if index < 0 || index >= l.size {
      log.Fatal("Remove failed, illegal index")
   }
   prev := l.dummyHead
   for i := 0; i < index; i++ {
      prev = prev.next
   }
   delNode := prev.next
   ret := delNode.e
   prev.next = delNode.next
   delNode = nil
   l.size--
   return ret
}


写回答

1回答

liuyubobobo

2020-07-28

没有问题的。实际上, delNode.next = NULL 不写,gc 都是可以正确回收这个空间的。在这里写上 delNode.next = NULL,只是和 ppt 动画中的 delNode 节点和整个链表断开对应上。课程后续解决 Leetcode 的题目中,我将不再写这句话:)


感谢你的分享,继续加油!:)

0

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2638 学习 · 1091 问题

查看课程