将元素插入链接列表后,我想检索它们。
这是结构:
typedef struct node
{
int data;
struct node *next;
} Element;
typedef Element* ROW;
我以:
开始我的清单void startRow(ROW *row){
*row = NULL;
}
之后,我使用函数在最后插入:
void insertEnd(ROW *row, int value){
if(*row==NULL){
*row = (ROW) (malloc(sizeof(Element)));
if(*row==NULL){
return;
}else{
(*row)->data = value;
(**row).next = NULL;
}
}
}
为了列出这些值,我使用了这个函数(我计划去除递归,只是玩arround):
void listValues(ROW row){
if(row==NULL){
return;
}
printf("%d\n", row->data);
listValues(row->next);
}
我这样称呼它,但只输出第一个元素!
int main(){
ROW row;
startRow(&row);
insertEnd(&row, 10);
insertEnd(&row, 20);
listValues(row);
return 0;
}
为什么呢? 它不应该输出完整的清单吗?
答案 0 :(得分:0)
问题出在方法insertEnd。
你应该链接列表的元素而不是它们:)这样:
void insertEnd(ROW *row, int value){
if(*row!=NULL){
ROW *lastElement = (ROW) (malloc(sizeof(Element)));
if(*lastElement==NULL){
return;
}else{
(*lastElement)->data = value;
(**lastElement).next = NULL;
(**row).next = lastElement;
}
} else {
*row = (ROW) (malloc(sizeof(Element)));
if(*row==NULL){
return;
}else{
(*row)->data = value;
(**row).next = NULL;
}
}
像这样,您将链接所有列表元素。