Я начинаю с C++, и я пытаюсь определить функцию BubbleSort для сортировки элемента в связанном списке. Но ошибка возникает приC++ BubbleSort LinkedList
for(current = firstPtr ; current != 0 ; current= current ->nextPtr)
говоря
First-chance exception at 0x01375557 in 111.exe: 0xC0000005: Access violation reading location 0x00000000.
Unhandled exception at 0x01375557 in 111.exe: 0xC0000005: Access violation reading location 0x00000000.
Вот основной код:
//define Node in class List
//Node.h
template<typename T> class List;
template<typename T>
class Node{
friend class List<T>;
public:
Node(T &); //constructor
T getData() const; //access data
private:
T data;
Node<T> *nextPtr; //point to the next Node
};
template<typename T>
Node<T> ::Node(T &key):data(key),nextPtr(0){}
template<typename T>
T Node<T>::getData()const{
return data;
}
//clase List
//List.h
#include<iostream>
#include"Node.h"
using namespace std;
template <typename T>
class List{
public:
List();
void insertAtFront(T);
void insertAtBack(T &);
bool removeFromFront(T &);
bool removeFromBack(T &);
bool isEmpty() const;
void print() const;
void BubbleSort();
private:
Node<T> *firstPtr;
Node<T> *lastPtr;
Node<T> *getNewNode(T&);
};
template<typename T>
List<T> :: List():firstPtr(0),lastPtr(0){}
template<typename T>
void List<T>::BubbleSort(){
Node<T> *current; //Point to the current node
Node<T> *temp = firstPtr; //hold the data of first element
for(bool swap = true; swap;){ // if no swap occurs, list is in order
swap =false;
for(current = firstPtr ; current != 0 ; current= current ->nextPtr){
if (current->data > current->nextPtr->data){ //swap data
temp->data = current->data;
current->data = current->nextPtr->data;
current->nextPtr->data = temp ->data;
swap = true;
}
}
}
}
Можете ли вы, ребята, помочь мне исправить это? Я использовал debug, но до сих пор не могу найти решение. Спасибо.
Я думаю, что это 'ток = ток -> nextPtr', что бросает ошибку. не уверен, хотя. Почему бы вам просто не проверить, является ли 'firstPtr'' 0' в начале функции? – Shoe