刪除單鏈表的冗餘值
阿新 • • 發佈:2018-12-05
1004:刪除單鏈表的冗餘值
Time/Memory Limit:1000 MS/32768 K
Submitted: 21 Accepted: 18
Problem Description
給定一個有n個元素的單鏈表,若單鏈表中有相等元素則稱存在冗餘值,要求進行刪除操作,即使得單鏈表中不存在相等元素。
Input
第一行為一個數字m,表示下面有m組資料,每組資料包括2行:第1行表示單鏈表的長度n(0<=n<=100,空表的輸入只有一行),第2行表示單鏈表的所有元素。
Output
每組輸出佔一行,單鏈表的每兩個元素之間有一空格。輸出刪除冗餘元素後的單鏈表的所有元素(空表輸出一空行)。
Sample Input
2
8
9 3 3 8 7 8 8 7
10
9 3 3 25 8 3 3 8 3 7
Sample Output
9 3 8 7
9 3 25 8 7
#include<iostream> #include<stdio.h> const int MAX=21; using namespace std; class List { public: struct node { int data; int count; node* next; }; node* head; public: List() { head=new node; head->next=NULL; } void Creat(int n) { node* r=head; for(int i=0; i<n; i++) { int num; cin>>num; node* s=new node; s->data=num; s->count=1; r->next=s; r=s; } r->next=NULL; } void Print() { node* p=head->next; if(p) { while(p->next) { cout<<p->data<<" "; p=p->next; } cout<<p->data<<endl; } else { cout<<endl; } } void DeleteRedudancyValue() { if(head->next==NULL||head==NULL) return; for(node* p=head->next; p!=NULL; p=p->next) { for(node* q=head->next; q&&q!=p; q=q->next) { if(p->data==q->data) p->count++; } } node* pre=head; node* cur=head->next; while(cur) { if(cur->count>1) { node* s=cur; pre->next=cur->next; cur=cur->next; delete s; } else { pre=cur; cur=cur->next; } } } }; int main() { int T; while(cin>>T) { while(T--) { int n; cin>>n; List list; list.Creat(n); list.DeleteRedudancyValue(); list.Print(); } } return 0; }
方法二刪除:
void remove() { node* newnode=head->next; while(newnode) { node* cur=newnode->next; node* pre=newnode; while(cur) { if(cur->data==newnode->data) { node* r=cur; pre->next=cur->next; cur=cur->next; delete r; } else { pre=cur; cur=cur->next; } } newnode=newnode->next; } }