加倍链接列表C ++

时间:2016-03-28 17:16:10

标签: linked-list

我正在创建一个模板化的双向链表(仅供练习)。

我有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;它按升序排列。头指向第一个节点,该节点保持最小值。所以从热到尾是按升序排列的。

我正在努力处理这些指针并弄清楚如何实际执行链接。将节点插入空列表是微不足道的,但是一旦填充了列表,我不知道如何执行指针的链接。有人可以给我一些建议吗?

1 个答案:

答案 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;
    }
}