求教,这个单链表为什么getData函数出有关问题
求教,这个单链表为什么getData函数出问题?
------解决方案--------------------
- C/C++ code
#include "Student.h" #include <iostream> using namespace std; template<class T> class linkNode{ public: linkNode(linkNode<T>* ptr=NULL){ link=ptr; } linkNode(T& x,linkNode<T>* ptr=NULL){ data=x; link=ptr; } T* data; linkNode* link; }; template<class T> class List:public linkNode<T>{ protected: linkNode<T>* first; public: List(); List(T& x); List(List<T>& L); ~List(); void makeEmpty(); int length(); linkNode<T>* getHead(); linkNode<T>* search(T& x); linkNode<T>* locate(int i); bool getData(int i,T& x); void setData(int i,T& x); bool insert(int i,T& x); bool remove(int i,T& x); bool isEmpty(); void sort(); List<T>&operator==(List<T>& L); List<T>&reverse(List<T>& L); }; template<class T> List<T>::List(){ first=new linkNode<T>(); } template<class T> List<T>::List(T& x){ first=new linkNode<T>(x); } template<class T> List<T>::List(List<T>& L){ List<T>* newList; linkNode<T>* newNode; linkNode<T>* current; current=first->link; newList->first=first; while (current->link!=NULL) { newNode->data=current->data; newNode->link=current->link; current=current->link; newNode=newNode->link; } } template<class T> List<T>::~List(){ makeEmpty(); } template<class T> void List<T>::makeEmpty(){ linkNode<T>* del; while(first->link!=NULL){ del=first->link; first->link=del->link; delete del; } } template<class T> int List<T>::length(){ linkNode<T>* q; int count=0; while(q->link!=NULL){ count++; q=q->link; } return count; } template<class T> linkNode<T>* List<T>::getHead(){ return first->link; } template<class T> linkNode<T>* List<T>::search(T& x){ linkNode<T>* current; current=first->link; while(current->link!=NULL){ if(current->data==x) break; current=current->link; } return current; } template<class T> linkNode<T>* List<T>::locate(int i){ linkNode<T>* current; current=first->link; for (int j=1;j<i;j++) { current=current->link; } return current; } template<class T> bool List<T>::getData(int i,T& x){ linkNode<T>* a; a=locate(i); if (a!=NULL) { x=a->data; return true; } return false; } template<class T> void List<T>::setData(int i,T& x){ locate(i)->data=x; } template<class T> bool List<T>::insert(int i,T& x){ linkNode<T>* newNode=new linkNode<T>(x); if(newNode==NULL) cerr<<"error"<<endl; linkNode<T>* current; current=locate(i); if(current==NULL) return false; else{ newNode->link=current->link; current->link=newNode; } return true; } template<class T> bool List<T>::remove(int i,T& x){ linkNode<T>* current; linkNode<T>* del; current=locate(i-1); if(current==NULL) return false; del=current->link; x=del->data; current=del->link; delete del; return true; } template<class T> bool List<T>::isEmpty(){ if(first->link==NULL) return true; else return false; } void main(){ List<int> ls; int t,k; ls.insert(1,t); ls.getData(1,k); cout<<k<<endl; }
------解决方案--------------------