c语言创建单链表
typedef int ElemType;
typedef struct Lnode{
ElemType data;
struct Lnode *next;
}Lnode,*LinkList;
int ListLength(LinkList L){
Lnode *p;
p = L->next;
int count = 0;
while(p != NULL){
count++;
p = p->next;
}
return count;
}
void CreatList_H(LinkList L,int n){
L = (LinkList)malloc(sizeof(Lnode));
L->next = NULL;
int i = 0;
for(i = 0;i < n;i++){
Lnode *p = (LinkList)malloc(sizeof(Lnode));
scanf("%d",&p->data);
p->next = L->next;
L->next = p;
}
}
int main(){
LinkList L;
CreatList_H(L,3);//头插法
int count = ListLength(L); //表长
printf("%d",count);
printf("1111111111111111111111");
return 0;
}
正常计算出单链表的长度
修改处见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct Lnode{
ElemType data;
struct Lnode *next;
}Lnode,*LinkList;
int ListLength(LinkList L){
Lnode *p;
p = L->next;
int count = 0;
while(p != NULL){
count++;
p = p->next;
}
return count;
}
void CreatList_H(LinkList* L,int n){ //(LinkList L,int n) //修改
(*L) = (LinkList)malloc(sizeof(Lnode));//L = 修改
(*L)->next = NULL; //L //修改
int i = 0;
for(i = 0;i < n;i++){
Lnode *p = (LinkList)malloc(sizeof(Lnode));
scanf("%d",&p->data);
p->next = (*L)->next;//L->next; 修改
(*L)->next = p; //L->next = p; 修改
}
}
int main(){
LinkList L;
CreatList_H(&L,3);//头插法
//CreatList_H(L,3); 修改
int count = ListLength(L);//表长
printf("%d\n",count); //修改
printf("1111111111111111111111");
return 0;
}
这样的create函数是不能实现L指针地址修改的
需要改成LinkIist*类型
CreatList_H函数中,L->next = p;改为p=p->next;