本人刚开始学习数据结构,今天在照着书上打了单链表的代码之后,尝试创建主函数测试单链表的功能,但遇到地址读取错误的问题,一直得不到解决,希望论坛的各位高手帮帮忙。
本人是在VS2013上测试的。
以下是代码:
#include <stdio.h>
typedef struct LNode{//定义单链表的数据结构类型
int date;
struct LNode *next;
}LNode, *LinkList;
LinkList L;
void InitLinkList(LinkList &l){//初始化单链表
if (!(l = new LNode))
printf(“NULL”);
l->next = NULL;
}
void CreateLinkList_L(LinkList &l, int n){//顺序输入n个数据元素插入单链表尾部
LinkList p,r;
InitLinkList(L);
r = l;
printf(“please enter the value of node:\n”);
for (int i = 1; i <= n; i++){
p = new LNode;
scanf_s(“%d”, &p->date);
r->next = p;
r = p;
}
l->next = NULL;
}
void DisplLinkList(LinkList &l){//输出单链表中的元素
LinkList p;
for (p = l->next; p; p = p->next){//此处无法进入循环
printf(“%d”, p->date);
}
printf(“\n”);
}
void main(){
CreateLinkList_L(L, 5);
DisplLinkList(L);
}
文中标注的红色的区域是无法执行的区域。每次执行到这里就终止了 ,根本无法进入循环
本人是在VS2013上测试的。
以下是代码:
#include <stdio.h>
typedef struct LNode{//定义单链表的数据结构类型
int date;
struct LNode *next;
}LNode, *LinkList;
LinkList L;
void InitLinkList(LinkList &l){//初始化单链表
if (!(l = new LNode))
printf(“NULL”);
l->next = NULL;
}
void CreateLinkList_L(LinkList &l, int n){//顺序输入n个数据元素插入单链表尾部
LinkList p,r;
InitLinkList(L);
r = l;
printf(“please enter the value of node:\n”);
for (int i = 1; i <= n; i++){
p = new LNode;
scanf_s(“%d”, &p->date);
r->next = p;
r = p;
}
l->next = NULL;
}
void DisplLinkList(LinkList &l){//输出单链表中的元素
LinkList p;
for (p = l->next; p; p = p->next){//此处无法进入循环
printf(“%d”, p->date);
}
printf(“\n”);
}
void main(){
CreateLinkList_L(L, 5);
DisplLinkList(L);
}
文中标注的红色的区域是无法执行的区域。每次执行到这里就终止了 ,根本无法进入循环
解决方案
20
原因是你CreateLinkList_L函数最后让l->next = NULL; 这样之后当然进不了循环了
DisplLinkList中的p也就为NULL
DisplLinkList中的p也就为NULL
10
void CreateLinkList_L(LinkList &l, int n) //顺序输入n个数据元素插入单链表尾部 { LinkList p,r; InitLinkList(L); r = l; printf("please enter the value of node:\n"); for (int i = 1; i <= n; i++) { p = new LNode; scanf_s("%d", &p->date); r->next = p; r = p; } r->next = NULL; //**************不是l->next,是r->next或p->next********************************** }