the list stores a group of terms in a polynomial

I'm trying to sort them once they've been inputted in order of exponent from greatest to least. here's what my sort function looks like:Code:struct term { int co; //coefficient of a term int exp; //exponent of a term term* link; }; typedef term* termptr; class Polynomial { public: void sort(); friend istream& operator >> (istream& ins, Polynomial& p1); //other random stuff you don't need to know for this private: termptr head; };

it compiles fine, but when I try to call it in my application file I get a segmentation fault and I can't figure out whyCode:void Polynomial::sort() { termptr cursor, current, prev; int largest = 0; current = head; cursor = current->link; prev = current; for (termptr ptr = head; ptr != NULL; ptr = ptr->link) { largest = current->exp; while (cursor) { if (cursor->exp > largest) { largest = cursor->exp; prev->link = cursor->link; ptr = cursor; current = cursor; cursor = prev; cursor = cursor->link; }else { prev = prev->link; cursor = cursor->link; } } current = current->link prev = current cursor = current->link; } } istream& operator >> (istream& ins, Polynomial& p1) { char x; string line; termptr new_term, current; new_term = new term; new_term->link = NULL; p1.set_head(new_term); current = new_term; getline(ins, line); if (ins) { line.erase(remove(line.begin(), line.end(), ' '), line.end()); stringstream ss(line); while (ss>>current->co >> x >> current->exp) { new_term = new term; new_term->link = NULL; current->link = new_term; current = current->link; } } current->link = NULL; return ins; } //here's my application file int main() { Polynomial poly1; cout << "Enter a polynomial: "; cin >> poly1; cout << endl; poly1.sort(); cout << poly1 << endl; return 0; }