单向链表->单向循环链表

  1 #include <stdio.h>

  2 #include <iostream>

  3 #include <stdlib.h>

  4 

  5 using namespace std;

  6 

  7 struct Person{

  8     int age;

  9     struct Person *next;

 10 };

 11 Person *CrtHeadNode(){

 12     Person *head ,*tmp;

 13     head = tmp = NULL;

 14     Person *p=NULL;

 15     int n;

 16     cout<<"Node Number:"<<endl;

 17     cin>>n;

 18     for(int i = 0;i<n;i++){

 19         tmp = new Person;//(Person*)(malloc(sizeof(Person)));

 20         cout<<"Age:" <<endl;

 21         cin >>tmp->age;

 22         tmp->next=NULL;

 23         if(head){

 24             tmp->next = head;

 25             head  = tmp ;

 26         }else{

 27 

 28             p = head = tmp;

 29         }

 30     }

 31     p->next = head;

 32     return head;

 33 }

 34 

 35 Person *CrtTailNode(){

 36     Person *head,*tail,*tmp;

 37     int n;

 38     cout<<"Node Number:"<<endl;

 39     cin>>n;

 40     head = tail = tmp = NULL;

 41     for(int i = 0;i<n;i++){

 42         tmp = new Person;//(Person*)(malloc(sizeof(Person)));

 43         cout<<"Age:" <<endl;

 44         cin >>tmp->age;

 45         if(head){

 46             while(tail->next!=head){

 47                 tail = tail->next;

 48             }

 49             tail->next = tmp;

 50             tail = tmp;

 51             tmp->next=head;

 52     //        head = tail->next;

 53         }else{

 54             head = tail = tmp;

 55             tmp->next=head;

 56     //        head = tail->next;

 57         }

 58     }

 59     return head;

 60 }

 61 Person *FindNode(Person *head,int age){

 62     Person* tmp;

 63     tmp = NULL;

 64     tmp = head;

 65     do{

 66         if(tmp->age == age){

 67             break;

 68         }

 69         tmp  = tmp->next;

 70     }while(tmp!=head);

 71     if(tmp==head){

 72         return NULL;

 73     }

 74     

 75     /*

 76     while(tmp!=NULL){

 77         if(tmp->age ==age){

 78             break;

 79         }

 80         tmp = tmp->next;

 81     }

 82     if(tmp==NULL){

 83         return NULL;

 84     }*/

 85     return tmp;

 86     

 87 }

 88 int DelNode(Person *head,int age){

 89     Person *tmp;

 90     tmp = NULL;

 91     tmp = head;

 92     do{

 93         if(tmp->next->age == age){

 94             break;

 95         }

 96         tmp  = tmp->next;

 97     }while(tmp!=head);

 98     if(tmp==head){

 99         return 1;

100     }

101     /*

102     while(tmp->next!=NULL){

103         if(tmp->next->age==age){

104             break;

105         }

106         tmp = tmp->next;

107     }

108     if(tmp->next==NULL){

109         cout<<"DEL NOT FIND!"<<endl;;

110         return 1;

111     }*/

112     else{

113         Person *find = NULL;

114         find  = tmp->next;

115         tmp->next = find->next;

116         free(find);

117 //        delete find;

118     }

119     return 0;

120 

121 }

135 

136 void show(Person *head){

137 

138 /*    if(head==NULL){

139         cout<<"Empty"<<endl;

140     }

141     */

142     

143     Person *p;

144     p = head->next;

145     cout<<head->age<<endl;

146     while(p!=head){

147         cout<<p->age<<endl;

148         p = p->next;

149     }

150 /*

151     Person *p = head;

152     do{

153         cout<<p->age<<endl;

154         p = p->next;

155     }while(p!=head);*/

156 }

157 int main(){

158     Person *p;

159     Person *find;

160     p = CrtHeadNode();

161 //    p = CrtTailNode();

162 //    MakeEmptyNode(p);

163     

164     

165     find = FindNode(p,10);

166     if(find==NULL){

167         cout<<"Not find"<<endl;

168     }else{

169         cout<<"FindNode is:"<<find->age<<endl;

170     }

171     

172     int n=    DelNode(p,10);

173     if(!n){

174         cout<<"del success!"<<endl;

175     }/*

176     find = FindNode(p,10);

177     if(find==NULL){

178         cout<<"Not find"<<endl;

179     }else{

180         cout<<"FindNode is:"<<find->age<<endl;

181     }*/

182     show(p);

183     return 0;

184 }

你可能感兴趣的:(链表)