我正在创建一个模板化的双向链表(仅供练习)。
我有2个类,ListClass&结点类别
template < class T >
class ListClass
{
private:
NodeClass < T > *head;
NodeClass < T > *tail;
public:
//some member functions
//my question will deal with the member function called insert(const T &val2Ins
};
template < class T >
class NodeClass
{
private:
data;
NodeClass *next;
NodeClass *prev;
public:
//some member functions (getter functions mostly)
};
我正在尝试为ListClass修改插入(const T&amp; val2Ins)函数。这个功能应该采取一些价值和&#34;排序&#34;它按升序排列。头指向第一个节点,该节点保持最小值。所以从热到尾是按升序排列的。
我正在努力处理这些指针并弄清楚如何实际执行链接。将节点插入空列表是微不足道的,但是一旦填充了列表,我不知道如何执行指针的链接。有人可以给我一些建议吗?
答案 0 :(得分:1)
您只需使用指针从头部(或尾部)遍历列表并比较数据。请注意,我假设NodeClass已将ListClass声明为朋友(或者您需要为私有数据成员设置getter和setter):
void insert(const T &val2Ins)
{
using Node = NodeClass<T>;
Node *next = head;
while(next)
{
if(val2Ins < next->data)
{
Node *n = new Node;
n->previous = next->previous;
n->next = next;
next->previous = n;
return;
}
next = next->next;
}
if(!next)
{
Node *n = new Node;
n->previous = tail;
if(tail)
tail->next = n;
else
tail = n;
if(!head)
head = n;
}
}