打印的时候输入两次就断了,不知道为啥
while(i<=n)
{
printf("输入链表第%d个元素的值",i);
scanf("%d",&(p->data));
p=p->next;
i++;
}
}
void ListInsert(Linklist &L,int i,int e,int n)
{
Lnode *p,q;
int j=1;
q=(Lnode)malloc(sizeof(Lnode));
q->data=e;
p=L->next;
while(p&&(j<i-1)&&(i<n))
{
printf("%d,",p->data);
p=p->next;
j++;
}
if(!p||j>i-1||i>n) printf("不合法\n");
q->next=p->next;
p->next=q;
}
int main()
{
int i,e,n;
Lnode *L;
L=(Lnode *)malloc(sizeof(Lnode));
printf("请输入需要链表的元素个数\n");
scanf("%d",&n);
Createlist(L,n);
printf("请输入要插入元素的位序\n");
scanf("%d",&i);
printf("请输入要插入的数值\n");
scanf("%d",&e);
printf("请输入原链表元素个数\n");
scanf("%d",&n);
ListInsert(L,i,e,n);
return 0;
}
}
供参考:
#include <stdio.h>
#include<stdlib.h>
typedef struct Lnode
{
int data;
struct Lnode *next;
}Lnode,*Linklist;
void Createlist(Linklist &L,int n)
{
int i=1;
Lnode *p=L,*q; //修改,增加 q 指针变量
//L=(Lnode)malloc(sizeof(Lnode)); //修改
//p=L; //修改
while(i<=n)
{
q=(Lnode*)malloc(sizeof(Lnode));//修改
printf("输入链表第%d个元素的值",i);
scanf("%d",&q->data); //修改
q->next=NULL; //修改
p->next=q; //修改 尾插法
p=q; //修改
i++;
}
}
void ListInsert(Linklist &L,int i,int e)//修改
{
Lnode *p,*q;
int j=1;
p=L->next;
while(p && j<i-1)//修改
{
//printf("%d,",p->data);//修改
p=p->next;
j++;
}
if(!p || i<1 || j<i-1)//修改
{
printf("不合法\n");
return; //修改
}
q=(Lnode*)malloc(sizeof(Lnode));//修改 移到这里,上面判断没问题再申请空间
q->data=e;
q->next=NULL;
if(i==1)p=L; //修改 判断是否在第一个结点插入
q->next=p->next;
p->next=q;
}
void print(Linklist L) //增加打印输出函数
{
Linklist p=L->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
int i,e,n;
Lnode *L;
L=(Lnode *)malloc(sizeof(Lnode));
printf("请输入需要链表的元素个数\n");
scanf("%d",&n);
Createlist(L,n);
print(L); //增加打印输出看结果
printf("请输入要插入元素的位序\n");
scanf("%d",&i);
printf("请输入要插入的数值\n");
scanf("%d",&e);
//printf("请输入原链表元素个数\n");//修改
//scanf("%d",&n); //修改
ListInsert(L,i,e); //修改
print(L); //增加打印输出看结果
return 0;
}
C语言有引用吗
Createlist函数只建了一个结点。