实现已排序的双向链接列表的困难

时间:2016-03-15 19:17:28

标签: c++ data-structures linked-list

我正在学习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;
}

1 个答案:

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

它并没有解决你的排序问题,但正如你上面所说,你会反复进行,所以我把它留给你去解决。

相关问题