我正在学习c ++课程,其中一项任务是为链表制作ADT并进行实施。 到目前为止我做得很好。但现在我应该按顺序添加元素。 下面的代码是我的ADD函数,我用这段代码完成的是对它们进行排序GIVEN列表中只有2个元素。 (我正在处理基础知识中的问题,然后改进我的代码)。 第11行的while循环是我尝试迭代(并且int是用于调试)
我遇到的问题是,如果我尝试添加大于5的数字,我的程序会在没有错误的情况下崩溃(cmd停止工作)。 这里奇怪的是,如果我删除我的while循环,它的工作原理。我不知道什么是错的。所以我希望得到一些帮助
Main.cpp的:
int main() {
SortedDoublyLinkedList<int> *list = new SortedDoublyLinkedList<int>(5, nullptr, nullptr);
int counter = 0;
while (counter < 2) {
int add;
cout << "Enter number: ";
cin >> add;
list->add(add);
counter++;
cout << counter << endl;
}
cout << list->removeLast()->getData()<< endl;
cout << list->removeLast()->getData()<< endl;
cout << list->removeLast()->getData()<< endl;
return 0;
}
SortedDoublyLinkedList.cpp
template<class T>
DoublyLinkedNode<T> *SortedDoublyLinkedList<T>::add(T val) {
if (isEmpty()) {
head = new DoublyLinkedNode<T>(val);
head->setPrevious(nullptr);
head->setNext(nullptr);
} else {
DoublyLinkedNode<T> *newEl = new DoublyLinkedNode<T>(val);
DoublyLinkedNode<T> *temp = head;
int t = 0;
while(temp->getData() != nullptr){
temp = temp->getNext();
t++;
cout << t << endl;
}
if(newEl->getData() > head->getData()){
newEl->setPrevious(head);
newEl->setNext(nullptr);
head->setNext(newEl);
cout <<"IF"<<endl;
}else{
DoublyLinkedNode<T> *temp = head;
head = newEl;
newEl->setPrevious(nullptr);
newEl->setNext(temp);
temp->setPrevious(head);
cout << "El" << endl;
}
}
numberOfElements++;
return head;
}
答案 0 :(得分:1)
循环的这一部分(我猜是试图打印出这些项目)......是错误的。 while部分在数据上循环时循环数据
你破碎的代码:
while(temp->getData() != nullptr){
temp = temp->getNext();
t++;
cout << t << endl;
}
更具功能性:
while(temp != nullptr){
cout << t << ":" << temp->getData() << endl;
temp = temp->getNext();
++t;
}
它并没有解决你的排序问题,但正如你上面所说,你会反复进行,所以我把它留给你去解决。