单链表的插入操作的实现
建立长度为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>
struct LinkNode
{
int data;
struct LinkNode* next;
};
struct LinkNode *Create(int n)
{
struct LinkNode *head,*p1,*p2;
head=p1=p2=(struct LinkNode*)malloc(sizeof(struct LinkNode));
for(int i=1;i<n;i++)
{
scanf("%d",&p1->data);
p1->next=(struct LinkNode*)malloc(sizeof(struct LinkNode));
p1=p2;
}
scanf("%d",&p1->data);
p1->next=NULL;
return head;
}
bool ListInsert(struct LinkNode *&head,int i,int n)
{
struct LinkNode *p,*s;
p=head;
if(i<=0||i>n) return false;
else
{
if(i==1)
{
s=(struct LinkNode*)malloc(sizeof(struct LinkNode));
scanf("%d",&s->data);
s->next=p;
head=s;
}
else
{
for(int j=0;j<i-2;j++)
{
p=p->next;
}
s=(struct LinkNode*)malloc(sizeof(struct LinkNode));
scanf("%d",&s->data);
s->next=p->next;
p->next=s;
}
return true;
}
}
int main()
{
int n;
int i;
struct LinkNode *head,*p;
scanf("%d",&n);
head=Create(n);
scanf("%d",&i);
if(ListInsert(head,i,n))
{
p=head;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
else
{
printf("error!");
}
}
/*
#include<stdio.h>
int main()
{
int n,a[100],i,data;
scanf("%d",&n);
for(int j=0;j<n;j++)
{
scanf("%d",&a[j]);
}
scanf("%d %d",&i,&data);
if(i<=0||i>n)
printf("error!");
else
{
for(int j=0;j<n;j++)
{
if(j==i-1)
{
for(int k=n;k>j;k--)
{
a[k]=a[k-1];
}
a[j]=data;
break;
}
}
for(int j=0;j<=n;j++)
{
printf("%d ",a[j]);
}
}
}
*/