实现排序的双向链表的困难

Difficulties implementing sorted Doubly Linked list

本文关键字:双向链表 实现 排序      更新时间:2023-10-16

我正在上一门 c++ 课,我们的任务之一是为链表制作一个 ADT 并进行实现。到目前为止,我做得很好。但是现在我应该按顺序添加元素。下面的代码是我的 ADD 函数,我用这段代码完成的是对它们进行排序,因为列表中只有 2 个元素。(我正在从基础开始处理这个问题,然后完善我的代码)。第 11 行的 while-loop 是我尝试迭代(int t 用于调试)

我遇到的问题是,如果我尝试添加大于 5 的数字,我的程序会崩溃而没有错误(cmd 停止工作)。奇怪的是,如果我删除我的while循环,它可以工作。我找不到问题所在。所以我希望能得到一点帮助

主.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;
}

这个循环(我猜是试图打印出项目)...是错误的。 while 部分在处理元素时循环访问数据

您的损坏代码:

    while(temp->getData() != nullptr){
        temp = temp->getNext();
        t++;
        cout <<  t  << endl;
    }

功能更强大:

    while(temp != nullptr){
        cout <<  t  << ":" << temp->getData() << endl;
        temp = temp->getNext();
        ++t;
    }

它不能解决您的排序问题,但正如您上面所说,您正在迭代进行,所以我将其留给您解决。