插入已排序的双向链表c ++

时间:2016-04-01 22:04:31

标签: c++ doubly-linked-list

尝试修复我的双向链表代码,以便对插入,任何想法进行排序。这就是我所拥有的。它插入到列表中,只是未分类。现在已经挣扎了一段时间。非常感谢。

template <typename T>
bool DoublyLinkedList<T>::insert(T data)
{
    int i = 0;
    Node<T> *tmp, *newNode;
    bool check = false;
    newNode = new Node<T>(data);
    tmp = mHead;

    if (newNode == NULL)
        return false;

    if (mHead == NULL)
    {
        mHead = newNode;
        mTail = newNode;
        mCount++;
        return true;
    }

    while (tmp != NULL)
    {
        if (tmp->mNext == NULL)
        {
            if (tmp->mData <= data)
            {
                newNode->mPrevious = tmp;
                tmp->mNext = newNode;
                mTail = newNode;
            }
            else
            {
                newNode->mNext = tmp;
                tmp->mPrevious = newNode;
                mHead = newNode;
            }
        }
        else if (tmp->mNext->mData >= data)
        {
            newNode->mPrevious = tmp;
            newNode->mNext = tmp->mNext;
            tmp->mNext->mPrevious = newNode;
            tmp->mNext = newNode;
            break;
        }

        tmp = tmp->mNext;
    }

    mCount++;
    return true;
}

1 个答案:

答案 0 :(得分:0)

如果我没有弄错的话,错误就在于你的其他人。您当前的实施比较&#34;数据&#34;到节点AFTER&#34; tmp&#34;并且,根据设计,不允许在列表中添加任何内容。

如果您有一个列表[4,7],并且输入了一个值为3的节点,则完全忽略第一个元素并与第二个元素进行比较 - 得到[4,3,7]。考虑将数据与tmp-> mData而不是tmp-&gt; next-&gt; mData进行比较,并相应地调整逻辑。

此外,在使用通用数据类型()时,您不应该依赖于简单的&#34;大于&#34;或者&#34;小于&#34;比较。说6&lt;&lt; 6&lt; 7,但在比较用户定义的结构或枚举类型时,可能没有明确的顺序。

相关问题