[关闭]
@lzb1096101803 2016-03-21T10:47:54.000000Z 字数 363 阅读 454

算法:在O(1)时间删除链表结点

数据结构和算法


给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。(已知需要删除结点的指针)

单向链表中删除一个结点,最常规的是从链表头结点开始,顺序遍历查找要删除的结点,当结点的next是被删除指针时,进行删除操作,保证链表没有断开,顺序查找需要O(n)时间复杂度

覆盖原有内容

之所以需要从头查找,是因为我们需要得到被删除的结点的前一个结点。单向链表中没有指向前一个结点的指针,所以只好从链表头顺序查找

我们可以把下一个结点的内容复制到删除结点上覆盖原有的内容,再把下一个结点删除,这样就相当于删除了当前需要删除的结点

同时注意,如果只有一个结点,而我们需要删除的是这个结点,删除结点后,还需要把链表的头结点设置为null

但是对尾结点而言,仍然需要顺序查找,时间复杂度为O(n)

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注