如何定义指针头显示第一个链表元素?编译器显示错误:
头= domino->信息;
struct dominopart {
int number1;
int number2;
};
struct dominoone {
dominopart info;
struct dominoone *next;
};
首先我将其定义为空指针,因为链接列表最初是空的。
struct dominoone* next= NULL;
struct dominoone* head=NULL;
然后逐行读取文件中的信息。
int readDomino (){
FILE *datei;
if((datei=fopen("datei.dat", "r") )==NULL) {
std::cout<<"File can't be opened"<<std::endl;
return 0;
}else {
int beginning;
int temp;
fscanf(datei, "%d", &beginning);
for(int i=0; i<beginning; i++) {
dominoone *domino= new dominoone;
fscanf(datei, "%i", &temp);
domino->info.number1=temp;
fscanf(datei, "%i", &temp);
domino->info.number2=temp;
printf("[%d:%d]", domino->info.number1, domino->info.number2);
domino->next=0;
if(i==1) {
head=domino->info; //The compiler shows mistake here
}
}
}return 0;
}
文件被读取并显示,我已正确写入文件,但我无法删除整个列表,因为我的指针头仍然是空指针:
void del () {
dominoone* tmp;
while(head != 0) {
tmp=(head)->next;
delete head;
head=tmp;
}
}
答案 0 :(得分:0)
此代码中的错误很少。
首先,由于左侧和右侧的类型不兼容,因此无法执行作业head=domino->info
。
其次,在阅读多米诺骨牌列表时,您需要跟踪列表的尾部。
所以你需要声明
struct dominoone* tail=NULL;
然后在填充结构后,用
替换if (i==1) ...
if (i == 0 ) head = domino;
else tail->next = domino;
tail = domino;
readDomino()
函数的最终版本可能如下所示:
int readDomino (){
FILE *datei;
struct dominoone* tail=NULL;
if((datei=fopen("datei.dat", "r") )==NULL) {
std::cout<<"File can't be opened"<<std::endl;
return -1;
}
int list_size;
fscanf(datei, "%d", &list_size);
for(int i=0; i<list_size; i++) {
dominoone *domino= new dominoone;
fscanf(datei, "%i", &domino->info.number1);
fscanf(datei, "%i", &domino->info.number2);
printf("[%d:%d]\n",
domino->info.number1,
domino->info.number2);
domino->next=NULL;
if (i == 0 ) head = domino;
else tail->next = domino;
tail = domino;
}
}
return 0;
}