952: 单链表的插入操作的实现
题目描述
建立长度为n的单链表,在第i个结点之前插入数据元素data。
输入
第一行为自然数n,表示链式线性表的长度; 第二行为n个自然数表示链式线性表各元素值;
第三行为指定插入的位置i;第四行为待插入数据元素data。
输出
指定插入位置合法时候,输出插入元素后的链式线性表的所有元素,元素之间用一个空格隔开。输入不合法,输出"error!"。
样例输入
5
1 2 3 4 5
3
6
样例输出
1 2 6 3 4 5
#include<iostream>
#include<malloc.h>
# define size 50
using namespace std;
typedef struct l
{
int data;
struct l *next;
}link;
void creatlink(link *&L)
{
L=(link *)malloc(sizeof(link));
L->next=NULL;
}
void stock(link *&L,int a[],int n)
{
link *p,*s;
p=L;
for(int i=0;i<n;i++)
{
s=(link *)malloc(sizeof(link));
s->data=a[i];
s->next=NULL;
p->next=s;
p=s;
}
}
void insert(link *&L,int a,int b)
{
link *p,*q,*s;
p=L;
q=L->next;
int i=-1;
while(q!=NULL)
{
i++;
if(i==a-1)
{
s=(link *)malloc(sizeof(link));
s->data=b;
p->next=s;
s->next=q;
}
p=q;
q=q->next;
}
}
void Cout(link *&L)
{
link *p=L->next;
while(p!=NULL)
{
cout << p->data << ' ';
p=p->next;
}
}
void Free(link *&L)
{
link *p,*q;
p=L;
q=L;
while(p!=NULL)
{
q=p->next;
free(p);
p=q;
}
}
int main()
{
int n,a[size],i,b;
cin >> n;
for(int i=0;i<n;i++)
cin >> a[i];
cin >> i >> b;
link *L;
creatlink(L);
stock(L,a,n);
if(i>n||i<1) cout << "error!";
else
{
insert(L,i,b);
Cout(L);
}
Free(L);
return 0;
}