#include <iostream>
using namespace std;
template<class T>class node{public: node():next(NULL) {} node(const T&value, node<T> *nextValue = NULL) : value_(value),next(nextValue) {} T getValue() { return value_;
}
public: node<T> *next; int value_;
};
template<class T>void show(const node<T> *value){ if (value) { const node<T> *p = value; while(p) { cout<<p->value_<<"/n"; p = p->next; } }}
template<class T>void DeleteValue(node<T>* value){ while( value) { node<T> *p = value; value = value->next; delete p; }}
// at proper position insert a value by less sorttemplate<class T>node<T> * AddValue(node<T> *pValue, T value){ node<T> *head = pValue; node<T> *newNode = NULL;
node<T> *prev = pValue, *curr = pValue; newNode = new node<T>(value);
bool bfind = false;
if ( value > pValue->value_) { newNode->next = pValue; head = newNode; bfind = true; }
while(curr &&!bfind) { if( (value < (prev->value_) ) && (value > curr->value_) ) { prev->next = newNode; newNode->next = curr; bfind = true; } else if(curr != NULL && NULL ==curr->next) { curr->next = newNode; bfind = true; } else { prev = curr; curr = curr->next;
} }
return head;
}
//Delete a special valuetemplate<class T>void DeleteSpeValue(node<T> * &front,const T& value){ node<T> *prev = NULL, *curr = front; bool bfind = false;
while (curr != NULL && !bfind) { if (value == curr->value_) { if (NULL == prev) { front = front->next; delete curr; bfind = true; } else { prev->next = curr->next; delete curr; bfind = true; } } else { prev = curr; curr = curr->next; } }}
template<class T>bool Find(const node<T> *first, T value){ bool bfind = false; const node<T> *p = first; while( p && !bfind) { if (value == p->value_) bfind = true; else p = p->next; }
return bfind;}
int main(){
node<int> *front = NULL, *newNode= NULL, *head= NULL,*back= NULL;
for (int i = 0; i < 5; ++i) { front = new node<int>(i*2 +i, front);
} //node<int> *result = AddValue<int>(front,21); //DeleteSpeValue(front, 12); cout<<"find value "<<Find(front,112)<<"/n" ; show<int>(front);
DeleteValue<int>(front);
return 0;}