1.题目:
Problem Description
输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除。分别输出建立的初始单链表和完成删除后的单链表。
Input
有多组输入数据,
第一行输入数据个数n(若n=0表示输入结束);
第二行依次输入n个整数;
第三行输入欲删除数据m;
第一行输入数据个数n(若n=0表示输入结束);
第二行依次输入n个整数;
第三行输入欲删除数据m;
Output
第一行依次输出原始单链表的数据;
第二行依次输出完成删除后的单链表数据;
第二行依次输出完成删除后的单链表数据;
Sample Input
10
56 25 12 33 66 54 7 12 33 12
12
0
Sample Output
56 25 12 33 66 54 7 12 33 12
56 25 33 66 54 7 33
2.参考代码:
#include <iostream>
using namespace std;
struct Node{
int data;
Node* next;
};
class LinkList{
private:
Node* head;
public:
LinkList(int* a,int n);
~LinkList();
void Delete(int x);
void show();
};
LinkList::LinkList(int* a,int n){
Node* r,* s;
head=new Node;
r=head;
for(int i=0;i<n;i++){
s=new Node;
s->data=a[i];
s->next=r->next;
r->next=s;
r=s;
}
r->next=NULL;
}
LinkList::~LinkList(){
Node* p,* q;
p=head;
while(p){
q=p;
p=p->next;
delete q;
}
}
void LinkList::Delete(int x){ ///核心代码
Node* p,* q;
p=head;
while(p->next){
if(p->next->data==x){
q=p->next;
p->next=q->next;
delete q;
}
else
p=p->next;
}
}
void LinkList::show(){ ///注意格式,这里没有要求两个数之前有一个空格哈!
Node* p;
p=head->next;
if(p){
while(p){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
}
int main()
{
int n,i,x,a[111];
while(cin>>n){
if(n==0)
break;
for(i=0;i<n;i++)
cin>>a[i];
LinkList w(a,n);
w.show();
cin>>x;
w.Delete(x);
w.show();
}
return 0;
}