LinkedList删除方法

two*_*ate 9 java linked-list data-structures

什么是双向链表的删除方法?

CMS*_*CMS 20

蜥蜴比尔说的算法相同,但以图形方式:-)

从链接列表中删除
(来源:jaffasoft.co.uk)


Bil*_*ard 17

一般算法如下:

  • 找到要删除的节点.
  • node.previous.next = node.next
  • node.next.previous = node.previous
  • node.previous = null
  • node.next = null
  • 如果您处于非GC环境中,请处置节点

您必须检查上一个和下一个节点是否为null,以查看是否正在移除头部或尾部,但这些是容易的情况.

  • 我总是使用在列表的开头和结尾有一个sentinal的偷偷摸摸的技巧(所以空列表有两个元素).这使用更多的内存大大简化了我的代码.当然,搜索必须从first-> next开始,到last-> prev结束,但我不必担心边缘情况. (2认同)
  • 或者将您的列表存储为铃声.只有一个sentinal,它出现在头部和尾部,而一个空列表包含一个元素,两个字段都指向自身. (2认同)