题目描述
建立长度为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>
typedef struct LNode //链表节点
{
int date; //数据域
struct LNode *next; //存下一个节点的LinkNode指针
}LinkNode;
void CreatNode(LinkNode *&head, int n) //创建单链表 , 尾插法
{
LinkNode *p, *q; //声明头指针和操作指针p1
head=(LinkNode *)malloc(sizeof(LinkNode));
p=(LinkNode *)malloc(sizeof(LinkNode));
head=p;
for(int i=1; i<n; i++)
{
scanf("%d", &p->date);
q=(LinkNode *)malloc(sizeof(LinkNode));
p->next=q;
p=q;
}
scanf("%d", &p->date);
p->next=NULL; //最后一个节点的next指空;
}
bool ListInsert(LinkNode *&head, int i, int n, int date) //插入函数,&为引用
{
LinkNode *p, *q;
p=head; //把第一个节点存下来
if(i<=0 || i>n) return false; //判断i的值是否合法
else
{
if(i==1)
{
q=(LinkNode *)malloc(sizeof(LinkNode));
q->date=date;
q->next=p;
head=q;
}
else
{
for(int j=1; j<i-1; j++)
{
p=p->next;
}
q=(LinkNode *)malloc(sizeof(LinkNode));
q->date=date;
q->next=p->next;
p->next=q;
}
return true;
}
}
int Printf(LinkNode *head)
{
LinkNode *p;
p=head;
while(p!=NULL)
{
printf("%d ", p->date);
p=p->next;
}
}
int main()
{
int n, i, date;
scanf("%d", &n);
LinkNode *head, *p;
CreatNode(head, n);
scanf("%d%d", &i, &date);
if(ListInsert(head, i, n, date))
Printf(head);
else
printf("error!");
}
注意
该程序仅供学习参考!一行。一个句子,只包含英文小写字母和空格,且不超过200个字符。