南郵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
時間制限(通常/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;
}