1.题目:
Problem Description
建立单链表,在第n个结点后插入指定结点,并完成遍历操作。
Input
输入数据有多组,每组数据占两行:
第一行有两个数字(n,m),第一个数n表示结点位置,第二个数表示指定需插入的数。后跟单链表各结点(不会超过100),以0结束一个单链表。
例如:
3 5
1 2 3 4 5 0
0 0
遇到0 0,结束程序。
第一行有两个数字(n,m),第一个数n表示结点位置,第二个数表示指定需插入的数。后跟单链表各结点(不会超过100),以0结束一个单链表。
例如:
3 5
1 2 3 4 5 0
0 0
遇到0 0,结束程序。
Output
输出插入后的单链表,每组输出占一行,每个元素之间有一个空格。
Sample Input
3 5
1 2 3 4 5 0
0 0
Sample Output
1 2 3 5 4 5
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 insert(int i,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];
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::insert(int i,int x){
Node* p,* s;
p=head->next;
int count=0;
while(p && count<i){
p=p->next;
count++;
}
if(p){
s=new Node;
s->data=x;
s->next=p->next;
p->next=s;
}
}
void LinkList::show(){
Node* p=head->next;
if(p){
cout<<p->data;
p=p->next;
while(p){
cout<<" "<<p->data;
p=p->next;
}
cout<<endl;
}
}
int main()
{
int n,m,a[1111];
while(cin>>n>>m){
if(n==0 || m==0)
break;
int i=0;
while(cin>>a[i]){
if(a[i]==0)
break;
else
i++;
}
LinkList w(a,i);
w.insert(n,m);
w.show();
}
return 0;
}