题目描述
建立长度为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 node{
int data;
struct node *next;
}linknode;
void create (linknode *&L,int a[],int n){
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 insert(linknode *&L,int position,int num){
linknode *s,*p=L;
int i=0;
while(i<position-1&&L!=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[10000];
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;
}
insert(L,position,num);
linknode *k=L->next ;
while(k!=NULL){
printf("%d ",k->data );
k=k->next ;
}
}
想法
- 定义单链表,与顺序表有差别,需仔细(定义数据和头指针)
- 函数 创建单链表
两个节点,*s用于不断生成,作为第三者。
申请内存,遍历读入,最后记得让最后一个指针指向为null
3.函数 插入操作
while循环寻找对应的第i个位置 不断指向下一个
找到后,生成新的节点*s 使其数据域等于data
4.主函数运算