单链表的插入算法
源代码在线查看: 单链表插入.c
//单链表的插入
#include "Stdio.h"
#include "Conio.h"
#define flag 0
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}LNode,*LinkList;
LinkList Creat_LinkList();
LNode *Get_LinkList(LinkList L,int i);
int Insert_LinkList(LinkList L,int i,datatype x);
void Put_LinkList(LinkList H);
main()
{
LinkList H;
int i;
datatype x;
H=Creat_LinkList();
printf("输入 i:");
scanf("%d",&i);
printf("输入数字:");
scanf("%d",&x);
if(Insert_LinkList(H,i,x)==1)
Put_LinkList(H);
getch();
}
LinkList Creat_LinkList()
{
LinkList L=NULL;
LNode *s,*R=NULL;
int x;
s=(LNode *)malloc(sizeof(LNode));
R=s;
L=s;
scanf("%d",&x);
while(x!=flag)
{
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
R->next=s;
R=s;
scanf("%d",&x);
}
R->next=NULL;
return L;
}
LNode *Get_LinkList(LinkList L,int i)
{
LNode *p=L;
int j=0;
while(p->next!=NULL&&j {
p=p->next;
j++;
}
if(j==i) return p;
else return NULL;
}
int Insert_LinkList(LinkList L,int i,datatype x)//在单链表L的第i个位置上插入值为x的元素
{
LNode *p,*s;
p=Get_LinkList(L,i-1);//查找第i-1个结点
if(p==NULL)
{
printf("参数i错!");
return 0;
}//第i-1个结点不存在,不能插入
else
{
s=(LNode *)malloc(sizeof(LNode));//申请,填装结点
s->data=x;
s->next=p->next;//新结点插入在第i-1个结点的后面
p->next=s;
return 1;
}
}
void Put_LinkList(LinkList L)
{
LNode *p;
p=L->next;
while(p!=NULL)
{
printf("%d\t",p->data);
p=p->next;
}
}