【发布时间】:2013-11-04 01:27:11
【问题描述】:
我在单链接列表中编写了一个方法,该方法在列表末尾插入一个对象。它是用线性时间写的,O(n)。
我将如何执行相同的任务,但要以恒定时间编写代码,O(1)?
线性时间码 O(n):
template <class Object>
void List<Object>::insert_back( const Object& data ) {
ListNode<Object>* newnode = new ListNode<Object>( data, NULL );
ListNode<Object>* lastNode = head;
while (lastNode->getNext()!= NULL && lastNode->getNext()->getElement() != data )
lastNode = lastNode->getNext();
lastNode->setNext( newnode );
}
【问题讨论】:
-
保留指向列表中最后一个节点的指针。每次将新节点添加到末尾时,将其更新为指向新的最后一个节点。
-
@JerryCoffin 我无法想象这个
标签: c++ data-structures linked-list big-o time-complexity