求助大佬~关于创建链表失败的问题
最近刚学数据结构,感觉书上的好多算法自己在实际敲的过程中,每次都有好多错误,不知道是编译器的问题还是我的代码问题~~但是把网上大佬的程序拷贝下来运行也是好多错误。比如说我下面创建链表,照书上打报很多错,自己结合网上的代码修改,虽然不报错了,但是在输出是也不成功,遍历不出来,而且GetElem也错误。求大佬们看看呀~~~#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int ElemType;
#definenull 0
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void CreateList(LinkList L,int n){
int i;
LinkList p;
L=(LinkList)malloc(sizeof (LNode));
L->next=NULL;
printf("请输入顺序表中的元素:");
for(i=n;i>0;--i){
p=(LinkList)malloc(sizeof (LNode));
scanf("%d",
&p->data);
p->next=L->next;L->next=p;
}
}
void Listtraverse(LinkList L)
{
//遍历链式表l
LinkList p=L->next;
while(p!=0)
{
printf("%d\n",p->data);
p=p->next;
}
}
int GetElem(LinkList L,int i)
{
//取带头节点的单链表l中第i个元素,用e返回
int j;
int e;
LinkList p;
p=L->next;
j=1;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i)return 0;
e=p->data;
printf("第%d个元素是%d\n",i,e);
return 0;
}
main(){
LinkList L;
int n;
printf("输入节点数:");
scanf("%d",&n);
CreateList(L,n);
while(L){
printf("%d\n",L->data);
L=L->next;
}
return 0;
} 本帖最后由 jackz007 于 2019-4-12 14:21 编辑
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct LNode {
int data ;
struct LNode * next ;
} LNode , * LinkList ;
LinkList CreateList(void)
{
int i , n, data ;
LinkList head , p1 , p2 ;
head = NULL ;
printf("输入节点数:") ;
scanf("%d" , & n) ;
if(n > 0) {
for(i = 0 ; i < n ; i ++) {
printf("节点 %d : " , i + 1) ;
scanf("%d" , & data) ;
if((p2 = (LinkList) malloc(sizeof(LNode))) != NULL) {
p2 -> data = data ;
p2 -> next = NULL ;
if(! i) head = p2 ;
else p1 -> next = p2 ;
p1 = p2 ;
} else {
fprintf(stderr , "error : malloc() failure!\n") ;
break ;
}
}
}
return head ;
}
void Listtraverse(LinkList L)
{
LinkList p ;
p = L ;
while(p != NULL) {
printf("%d\n" , p -> data) ;
p = p -> next ;
}
}
int GetElem(LinkList L , int n)
{
int i , e ;
LinkList p ;
e = -1 ;
for(i = 0 , p = L ; i < n && p != NULL ; i ++) p = p -> next ;
if(i == n && p != NULL) {
printf("第%d个元素是%d\n" , n , p -> data) ;
e = 0 ;
}
return e ;
}
main(void)
{
LinkList L ;
L = CreateList() ;
while(L){
printf("%d\n" , L -> data) ;
L = L->next ;
}
}
传入的形参改成LinkNode *L
页:
[1]