南郵OJ 1014データの挿入と削除


データの挿入と削除
時間制限(通常/Java) : 
1000 MS/ 3000 MS          実行メモリ制限:65536 KByte合計コミット:1946           テスト合格:405 
試合の説明
1組のデータ(10000以下)に新しい数を挿入し、所与の数に等しいすべてのデータを削除します.
入力
最初の行は、10,000を超えない非負の整数のセットです.-1を終了フラグとします.
2行目は挿入する数です.
3行目は削除する数です.
しゅつりょく
最初の行は、小さい順から大きい順の数を出力します.要素がない場合は、「No elements.」(引用符を除く)を出力します.
2行目の出力は、挿入後の小さい順から大きい順の数まで「,」で区切られます.
3行目の出力は、削除後の小さい順から大きい順の数を「,」で区切ります.要素がない場合は、「No elements.」(引用符を除く)を出力します.
サンプル入力
100 98 79 63 44 99 -1 88 79
サンプル出力
44,63,79,98,99,100 44,63,79,88,98,99,100 44,63,88,98,99,100
ヒント
 
テーマソース
GUOJ
#include<iostream>
using namespace std;

template<typename Type>
class SinglyLinkedNode{
	Type data;
	SinglyLinkedNode *next;
public:
	void createLink(void);
	void printLink(void);
	void reverseLink(void);
	void deleteElements(Type del);
	void addNodeToOrderedLink(Type add);
};

/*
*    :      ,         n(0<n≤1000),         
*    : 
*    : 
*  :   
*  :2014-8-17 21:42:44
*/
template<typename Type>
void SinglyLinkedNode<Type>::createLink(void){
	int n;						//    
	cin>>n;
	SinglyLinkedNode *p,*q;
	p = this;
	while(n--){
		q = new SinglyLinkedNode();
		cin>>q->data;
		p->next = q;
		p = q;
	}
}

/*
*    :      
*    : 
*    : 
*  :   
*  :2014-8-17 21:42:51
*/
template<typename Type>
void SinglyLinkedNode<Type>::printLink(void){
	SinglyLinkedNode *p = this->next;
	if(p==NULL){
		cout<<"No elements.";
	}
	while(p!=NULL){
		cout<<p->data;
		p = p->next;
		if(p!=NULL)
			cout<<",";
	}
	cout<<endl;
}

/*
*    :      
*    : 
*    : 
*  :   
*  :2014-8-17 21:42:28
*/
template<typename Type>
void SinglyLinkedNode<Type>::reverseLink(void){
	SinglyLinkedNode *p,*q;
	p = this->next;								//p           ,                  
	if(p == NULL) return;
	q = p->next;								//q         
	while(q!=NULL){		
		p->next = q->next;
		q->next = this->next;
		this->next = q;
		q = p->next;
	}
}

/*
*    :                
*    :Type del:      
*    : 
*  :   
*  :2014-8-17 21:43:38
*/
template<typename Type>
void SinglyLinkedNode<Type>::deleteElements(Type del){
	SinglyLinkedNode *p,*q;
	p = this;
	q = p->next;
	while(q!=NULL){
		if(q->data == del){
			p->next = q->next;
			delete q;
			q = p->next;
		}else{
			p = p->next;
			q = p->next;		
		}
	}
}

/*
*    :                 ,      
*    :Type add:        
*    : 
*  :   
*  :2014-8-17 21:44:23
*/
template<typename Type>
void SinglyLinkedNode<Type>::addNodeToOrderedLink(Type add){
	SinglyLinkedNode *p,*q;	
	q = new SinglyLinkedNode();
	q->data = add;
	p = this;
	while(p->next!=NULL && p->next->data<add){
		p = p->next;
	}
	q->next = p->next;
	p->next = q;
}

int main(void){
	int temp;
	SinglyLinkedNode<int> *head = new SinglyLinkedNode<int>();
	while(cin>>temp && temp!=-1){
		head->addNodeToOrderedLink(temp);
	}
	head->printLink();
	cin>>temp;
	head->addNodeToOrderedLink(temp);
	head->printLink();
	cin>>temp;
	head->deleteElements(temp);
	head->printLink();
	return 0;
}