单链表类模板节点头

ListNode.h

 1 #include "stdafx.h"
 2 #include<iostream>
 3 using namespace std ;
 4 template<typename Type> class SingleList;
 5 template <typename Type>
 6 class ListNode{
 7 private: 
 8     friend class SingleList<Type>;
 9     ListNode():m_next(NULL){}
10     ListNode(const Type item , ListNode<Type>*next=NULL):m_data(item),m_next(next){}
11     ~ListNode(){m_next=NULL;}
12 public:
13     Type getData(){return m_data ; }
14     friend ostream& operator<<(ostream&,ListNode<Type>&);
15 private:
16     Type m_data;
17     ListNode *m_next;
18 };
19 template<typename Type>
20 ostream& operator<<(ostream& os , ListNode<Type>& out){
21     os << out.m_data;
22     return os;
23 }

单链表头

SingleList.h

  1 #include "ListNode.h"
  2 template<typename Type>
  3 class SingleList{
  4 public:
  5     SingleList(){head = new ListNode<Type>;}
  6     ~SingleList(){
  7     makeEmpty();
  8     delete head;
  9     }
 10 public:
 11     void makeEmpty();
 12     int length();
 13     ListNode<Type>* find(Type item , int n)const;
 14     ListNode<Type>* find(int n)const;
 15     bool insert(Type item, int n =0);
 16     Type remove(int n);
 17     bool removeAll(Type item);
 18     Type get(int n);
 19     void ReverseSinglyLinkedList();
 20     void print();
 21 private:
 22     ListNode<Type> *head;
 23 };
 24 template <typename Type>
 25 void SingleList<Type>::makeEmpty(){
 26     ListNode<Type> * pdel = NULL;
 27     while(head->m_next!=NULL){
 28         pdel = head->m_next;
 29         head->m_next = pdel->m_next;
 30         delete pdel;
 31     }
 32 }
 33 template <typename Type>
 34 int SingleList<Type>::length(){
 35     int count = 0 ;
 36     ListNode <Type> *p = head->m_next;
 37     while (p!=NULL){
 38         p = p->m_next;
 39         count++;
 40     }
 41     return count;
 42 }
 43 template<typename Type>
 44 ListNode<Type>*SingleList<Type>::find(int n)const{
 45     if(n<0){cout << "out of the boundary"<< endl ;return NULL;}
 46     ListNode<Type>* p = head;
 47     for(int i =0 ; i<=n&&p ;i++){
 48         p = p->m_next;
 49     }
 50     if(p==NULL){
 51         cout << "can't find the element"<<endl;
 52         return NULL;
 53     }
 54     return p;
 55 }
 56 template<typename Type>
 57 ListNode<Type>*  SingleList<Type>::find(Type item , int n)const{
 58     if(n<1){
 59         cout << "the n is illegal" << endl;
 60         return NULL;
 61     }
 62     ListNode<Type> *p = head;
 63     int count = 0;
 64     while(count!=n && p){
 65         p=p->m_next;
 66         if(p->m_data==item)
 67         count++;
 68     }
 69     if(p==NULL){
 70         cout << "can't find the element"<<endl;
 71         return NULL;
 72     }
 73     return p;
 74 }
 75 template<typename Type>
 76 bool SingleList<Type>::insert(Type item, int n=0){
 77     ListNode<Type> *p = head;
 78     if(n<0){
 79         cout << "the n is illegal"<<endl;
 80         return false;
 81     }
 82     ListNode<Type>* pnode = new ListNode<Type>(item);
 83     ListNode<Type>* pmove = head;
 84     if(pnode==NULL){
 85         cout << "Application is error "<< endl;
 86         return false;
 87     }
 88     for(int i = 0 ; i<n&&pmove; i++){
 89         pmove = pmove->m_next;
 90     }
 91     if(pmove==NULL){
 92         cout << "the n is illegal " << endl;
 93         return false;
 94     }
 95     pnode->m_next = pmove->m_next;
 96     pmove->m_next = pnode;
 97     return true;
 98 }
 99 template<typename Type>
100 Type SingleList<Type>::remove(int n){
101     if(n<0){
102         cout << "can't find th element"<<endl;
103         exit(0);
104     }
105     ListNode<Type>* pmove=head ,*pdel;
106     for(int i = 0 ; i<n&&pmove ; i++){
107         pmove = pmove->m_next;
108     }
109     if(pmove->m_next==NULL){
110         cout << "can't find the element" <<endl;
111         exit(0);
112     }
113     pdel = pmove->m_next;
114     pmove->m_next = pdel->m_next;
115     Type item = pdel->m_data;
116     delete pdel;
117     return item;
118 }
119 template <typename Type>
120 bool SingleList<Type>::removeAll(Type item){
121     ListNode<Type> *pmove = head,*pdel = pmove->m_next;
122     while(pdel!=NULL){
123         if(pdel->m_data==item){
124             pmove->m_next = pdel->m_next;
125             delete pdel;
126             pdel = pmove->m_next;
127             continue;
128         }
129         pmove=pmove->m_next;
130         pdel = pdel->m_next;
131         pmove = pmove->m_next;
132     }
133     return true;
134 }
135 template<typename Type>
136 Type SingleList<Type>::get(int n){
137     if(n<0){
138         cout << "can't find the element "<<endl;
139         exit(0);
140     }
141     ListNode<Type> *pmove =head->m_next;
142     for(int i =0 ; i<n ; i++){
143         pmove = pmove->m_next;
144         if(NULL == pmove){
145             cout << "can't find the element "<<endl;
146             exit(0);
147         }
148     }
149     return  pmove->m_data;
150 }
151 template <typename Type>
152 void SingleList<Type>::print(){
153     ListNode<Type> *pmove = head->m_next;
154     cout << "head";
155     while (pmove!=NULL){
156         cout << "->" << pmove->m_data;
157         pmove = pmove->m_next;
158     }
159     cout << endl;
160 }
161 template<typename Type>
162 void SingleList<Type>::ReverseSinglyLinkedList(){
163     if(head->m_next==NULL)return;
164     ListNode<Type> *pmove = head->m_next;
165     ListNode<Type> *temp ;
166     while(pmove->m_next!=NULL){
167         temp = pmove->m_next;
168         pmove->m_next = temp->m_next;
169         temp->m_next = head->m_next;
170         head->m_next = temp;
171     }
172 }

 

posted on 2014-09-29 10:48  人生如梦多半是在演戏  阅读(232)  评论(0编辑  收藏  举报