class UserInfo { public: struct UserInfoLinkNode { UserInfoLinkNode(UserInfo * ui){ info = ui; next = NULL; } UserInfo * info; struct UserInfoLinkNode * next; }; UserInfo(int id){ FriendListHead = NULL; FriendListTail = NULL; FriendCount = 0; FriendCount1 = 0; Id = id; } void AddFriend(UserInfo * ui) { if ( NULL==ui ) { return ; } if ( NULL==FriendListHead ) { FriendListHead = FriendListTail = new UserInfoLinkNode(ui); } else { FriendListTail->next = new UserInfoLinkNode(ui); FriendListTail = FriendListTail->next; } ++FriendCount; ui->FriendCount1++; } void DelFriend(UserInfo * ui) { if ( NULL==ui || NULL==FriendListHead ) { return ; } struct UserInfoLinkNode * p = FriendListHead; struct UserInfoLinkNode * p1 = p; while( NULL!=p ) { if ( ui==p->info ) { ui->FriendCount1--; --FriendCount; if ( p1==p ) { if ( FriendListHead==FriendListTail ) { FriendListHead = FriendListTail = NULL; } else { FriendListHead = FriendListHead->next; } } else { if ( p==FriendListTail ) { FriendListTail = p1; FriendListTail->next = NULL; } else { p1->next = p->next; } } delete p; break; } p1 = p; p = p->next; } } bool IsFriend(int id) { struct UserInfoLinkNode * p = FriendListHead; while( NULL!=p ) { if ( id==p->info->Id ) { return true; } p = p->next; } return false; } int Id; struct UserInfoLinkNode * FriendListHead; struct UserInfoLinkNode * FriendListTail; int FriendCount; int FriendCount1; };