题目描述
建立长度为n的单链表,在第i个结点之前插入数据元素data。
输入
第一行为自然数n,表示链式线性表的长度; 第二行为n个自然数表示链式线性表各元素值; 第三行为指定插入的位置i;第四行为待插入数据元素data。
输出
指定插入位置合法时候,输出插入元素后的链式线性表的所有元素,元素之间用一个空格隔开。输入不合法,输出"error!"。
样例输入
5
1 2 3 4 5
3
6
样例输出
1 2 6 3 4 5
#include<stdio.h>
#include<malloc.h>
#define MaxSize 10000
using namespace std;
typedef struct LNode
{
int data;
struct LNode *next;
}LinkNode;
void Create(LinkNode*&L,int a[],int n)//尾插法,教材48页
{
LinkNode *s,*r;
L=(LinkNode*)malloc(sizeof(LinkNode));
r=L;
for(int i=0;i<n;i++)
{
s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
void Listinsert(LinkNode*&L,int position,int num)//插入数据
{
LinkNode *p=L,*s;
int i=0;
while(i<position-1&&p!=NULL)
//找到指定位置的前一位置,即找到插入位置
{
i++;
p=p->next;
}
s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=num;
s->next=p->next;
p->next=s;
}
int main()
{
LinkNode*L;
int n,position,num,a[MaxSize];
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
Create(L,a,n);
scanf("%d",&position);
scanf("%d",&num);
if(position<1||position>n)
{
printf("error!");
return 0;
}
Listinsert(L,position,num);
LinkNode*k=L->next;
while(k!=NULL)
{
printf("%d ",k->data);
k=k->next;
}
}