题目描述 建立长度为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<stdlib.h>
typedef struct lnode{
int data;
struct lnode *next;;
}lnode,*linklist;
linklist initlist(linklist L){
L=(lnode*)malloc(sizeof(lnode));
L->next=NULL;
return L;
}
linklist creatlink(linklist L){
int x,n;
scanf("%d",&x);
lnode *r=L,*s;
while(x>0){
x--;
s=(lnode*)malloc(sizeof(lnode));
scanf("%d",&n);
s->data=n;
r->next=s;
r=s;
}
r->next=NULL;
return L;
}
bool linkinsert(linklist L,int i,int e){
lnode *p;
if(i<=0)
return false;
p=L;
int j=0;
while(p!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p==NULL)
return false;
lnode *s=(lnode*)malloc(sizeof(lnode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
void printlink(linklist L){
linklist p;
p=L->next;
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
}
int main()
{
int i,e;
linklist L;
L=initlist(L);
L=creatlink(L);
scanf("%d",&i);
scanf("%d",&e);
bool c;
c=linkinsert(L,i,e);
if(c==false) printf("error!");
else printlink(L);
return 0;
}
|