【发布时间】:2012-12-03 03:27:55
【问题描述】:
编写一个函数来对链表进行头部插入。将对象插入头部并重新附加列表时,它工作了一半,但我以某种方式丢失了列表中的原始头节点。
如果列表是 [green, red, blue] 并且我尝试插入黄色,它会起作用,但新列表将是 [yellow, red, blue]。
节点类是:
template<class T>
class Node
{
public:
Node(T theData, Node<T>* theLink) : data(theData), link(theLink){}
Node<T>* getLink( ) const { return link; }
const T& getData( ) const { return data; }
void setData(const T& theData) { data = theData; }
void setLink(Node<T>* pointer) { link = pointer; }
private:
T data;
Node<T> *link;
};
List 被存储在一个队列中,因此 head insert 是该类的一个方法。队列前后都有私有变量,指向列表的相应位置。
template<class T>
void Queue<T>::headInsert(T& theData)
{
Node<T> *temp;
temp = front->getLink();
front->setLink(new Node<T>(theData, temp->getLink() ));
front = front->getLink();
}
【问题讨论】:
-
为什么要使用 getter 和 setter?只需将它们设为公共成员即可。
-
你可能想看看工作code for a linked list。
-
@Pubby:总的来说,我会同意这种微不足道的结构。不过,拥有 getter 和 setter 并没有什么坏处。但它确实增加了添加验证逻辑的灵活性。您可以在 setter 中添加代码以检测是否会发生循环。这在调试版本中很有用。
标签: c++ linked-list