#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct Lnode{
Elemtype data;
struct Lnode *next;
}Lnode,*Linklist;
int InitList_Sq(Linklist L){ // 构造一个空的线性表L
L=(Linklist)malloc(sizeof(struct Lnode));
if(!L)exit(0);
L->next=NULL;
return 1;
}
int ListInsert_L(Linklist L,int i,Elemtype e){
Linklist p;
Lnode *s;
p=L;
int j=0;
while(p&&j<i-1){
p=p->next;
j++;
}
if(!p||j>i-1) return -1;
s=(Linklist)malloc(sizeof(struct Lnode));
s->data=e;
s->next=p->next;
p->next=s;
return 0;
}
int Input(Linklist L){
L=L->next;
printf("链表L为:");
while(L){
printf("%d ",L->data);
L=L->next;
}
}
int main(){
Linklist L;
int i,j;
InitList_Sq(L);
for(i=1;i<=5;i++){
ListInsert_L(L,1,i);
}
Input(L);
}
这个程序结果运行出错。
下面一个正确:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct Lnode{
Elemtype data;
struct Lnode *next;
}Lnode,*Linklist;
int InitList_Sq(Linklist *L){ // 构造一个空的线性表L
(*L)=(Linklist)malloc(sizeof(struct Lnode));
if(!(*L))exit(0);
(*L)->next=NULL;
return 1;
}
int ListInsert_L(Linklist L,int i,Elemtype e){
Linklist p;
Lnode *s;
p=L;
int j=0;
while(p&&j<i-1){
p=p->next;
j++;
}
if(!p||j>i-1) return -1;
s=(Linklist)malloc(sizeof(struct Lnode));
s->data=e;
s->next=p->next;
p->next=s;
return 0;
}
int Input(Linklist L){
L=L->next;
printf("链表L为:");
while(L){
printf("%d ",L->data);
L=L->next;
}
}
int main(){
Linklist L;
int i,j;
InitList_Sq(&L);
for(i=1;i<=5;i++){
ListInsert_L(L,1,i);
}
Input(L);
}
个人觉得第一个程序逻辑上也没有出错,是我对&的理解不深刻吗,贵请大神指教。