C++ 插入已排序的双链接列表c++;
尝试修复我的双链表代码,以便在插入时排序,任何想法。这是我的。它插入到列表中,只是未排序。我已经为此挣扎了一段时间了。非常感谢C++ 插入已排序的双链接列表c++;,c++,doubly-linked-list,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
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;
}
模板
布尔双链接列表::插入(T数据)
{
int i=0;
Node*tmp,*newNode;
布尔检查=假;
newNode=新节点(数据);
tmp=mHead;
if(newNode==NULL)
返回false;
if(mHead==NULL)
{
mHead=newNode;
mTail=newNode;
mCount++;
返回true;
}
while(tmp!=NULL)
{
如果(tmp->mNext==NULL)
{
如果(tmp->mData mpprevious=tmp;
tmp->mNext=newNode;
mTail=newNode;
}
其他的
{
newNode->mNext=tmp;
tmp->mpprevious=newNode;
mHead=newNode;
}
}
else if(tmp->mNext->mData>=数据)
{
newNode->mpprevious=tmp;
newNode->mNext=tmp->mNext;
tmp->mNext->mpprevious=newNode;
tmp->mNext=newNode;
打破
}
tmp=tmp->mNext;
}
mCount++;
返回true;
}
如果我没有弄错的话,错误在于else If。您当前的实现将“data”与节点中“tmp”之后的值进行比较,并且根据设计,不允许在列表中添加任何内容
如果你有一个列表(4, 7),你输入一个值为3的节点,则完全忽略第一个元素,并与第二个元素进行比较,结果是[4,3,7]。考虑将数据与TMP->MDATA而不是TMP-> NeX->MDATA进行比较,并相应地调整逻辑。
此外,在使用泛型数据类型()时,不应依赖于简单的“大于”或“小于”比较。说6<7并不重要,但在比较用户定义的结构或枚举类型时,可能没有明确的顺序。理论很简单:找到第一个具有较大值的节点(或更小,取决于排序顺序)值。并在找到的节点之前添加新节点。实际上,这可能会有点困难,这就是为什么您可能希望在编写代码之前先将其写在纸上的原因。请记住应在当前列表的开头或结尾之前插入新值的情况。至于您的问题,如果不想用函数来启动(使用上面的建议),那么您需要学习如何使用调试器,以及如何逐行地逐行通过代码,这样会帮助您找到像您所遇到的问题。为了帮助调试,在什么情况下它没有正确插入?在开始时?在结尾?中间有什么情况吗?