我正在尝试实现一个从命令行构建链接列表的程序。 我有两个功能,一个创建列表,另一个打印列表。 我的问题是,列表从列表中输出数据时是以相反的顺序进行的?为什么会这样呢?我能做什么?预先感谢!
struct Node {
char* namePtr_;
struct Node* nextPtr_;
};
创建列表功能
struct Node* makeList (int argc, char* argv[]) {
struct Node* list = NULL; // Head
struct Node* end = NULL;
if (argc <= 1) {
return NULL;
}
int i;
for(i = 1; i < argc; i++) {
struct Node* newNode;
newNode = (struct Node*)malloc(sizeof(list));
newNode->namePtr_ = argv[i];
newNode->nextPtr_ = list;
list = newNode;
}
return(list);
}
显示列表功能
void print (const struct Node* list){
const struct Node* run;
run = list;
while (run != NULL) {
printf("%s\n", run->namePtr_);
run = run->nextPtr_;
}
}
释放内存功能
void release (struct Node* list){
struct Node* head = list;
free(head);
free(head->namePtr_);
}
命令行参数
./argList hello there !
输出
!
there
hello
答案 0 :(得分:0)
您要用每个新参数替换列表的开头,从左到右读取。最后一个参数将是您的最后一个头。
因此,当您从头向下阅读列表时,最后一个参数将是第一个,从而反转输入参数。
答案 1 :(得分:0)
这里有一个错误
newNode = (struct Node*)malloc(sizeof(list));
sizeof(list)
返回指针的大小,以获取想要的struct
您在推动,相反,您需要排队(连接到尾巴,而不是头部)
最后,不要sizeof(*list)
,传递给free(namePtr_)
(main
)的参数不会被您的程序动态保留,规则是每个{{1 }}