9007:單鏈表按值操作
阿新 • • 發佈:2018-12-05
Problem Description
對值遞增有序的單鏈表進行以下操作:若表中存在值為x的結點,則將它從表中刪除;否則,就往表中插入一個值為x的結點,並保持表值遞增有序的性質不變(假設表中沒有值相同的元素)。處理後若為空表則不輸出。
Input
每組資料包括3行,第一行表示單鏈表的長度n(0<=n<50);第二行表示單鏈表的所有元素;第三行表示x值。
Output
輸出執行操作後的單鏈表,元素之間用一個空格分隔。
Sample Input
5 1 3 5 7 9 3 5 1 3 5 7 9 4
Sample Output
1 5 7 9 1 3 4 5 7 9
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; struct node { int data; node* next; }; class List { public: node* head; List() { head=new node; head->next=NULL; } void creat(int n) { node* r=head; int num; for(int i=0; i<n; i++) { cin>>num; node* s=new node; s->data=num; r->next=s; r=s; } r->next=NULL; } int fineIndex(int data) { node* p=head; int count=0; while(p->next&&p->next->data!=data) { count++; p=p->next; } return count+1; } int Delete(int index) { node* p=head; int i=0; int data; while(p->next&&i++<index-1) { p=p->next; } if(p->next) { data=p->next->data; node* temp=p->next; p->next=p->next->next; delete temp; } return data; } void Insert(int data) { node* p=head; while(p->next&&p->next->data<data) { p=p->next; } node* s=new node; s->data=data; s->next=p->next; p->next=s; } ~List() { // if(head==NULL||head->next==NULL)return; node* p=head->next; while(p) { node* temp=p; p=p->next; delete temp; } } void print() { if(head->next==NULL||head==NULL) { return; } node* p=head->next; while(p->next) { cout<<p->data<<" "; p=p->next; } cout<<p->data<<endl; } }; int main() { int T; while(cin>>T) { //while(T--) { // int n; //cin>>n; List* list=new List; list->creat(T); int data; cin>>data; int index=list->fineIndex(data); if(index>T) { list->Insert(data); } else { list->Delete(index); } list->print(); delete list; // } } return 0; }