简单的单链表操作

    技术2022-05-11  38

    #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;} 


    最新回复(0)