我正在尝试实现一个从命令行构建链表的程序。我有两个函数,一个用于创建列表,另一个用于打印列表。我的问题是,当从列表中输出数据时,列表是按相反的顺序进行的?为什么会发生这种情况?我能做什么?提前感谢!
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("%sn", run->namePtr_);
run = run->nextPtr_;
}
}
释放内存功能
void release (struct Node* list){
struct Node* head = list;
free(head);
free(head->namePtr_);
}
命令行参数
./argList hello there !
输出
!
there
hello
这里有一个错误
newNode = (struct Node*)malloc(sizeof(list));
sizeof(list)
返回指针的大小,以获得您想要的sizeof(*list)
的struct
的大小
你在推,相反,你需要排队(连接到尾部,而不是头部(
这里有一个简单的实现
最后,不要使用free(namePtr_)
,传递给main
(argv[x]
(的参数不是您的程序通常保留的,规则是每个malloc
一个free
您将用从左到右的每个新参数替换列表的头部。最后一个参数将是你的最后一个头。
因此,当您从头开始读取列表时,最后一个参数将是第一个,从而反转输入参数。