c-链表-命令行参数



我正在尝试实现一个从命令行构建链表的程序。我有两个函数,一个用于创建列表,另一个用于打印列表。我的问题是,当从列表中输出数据时,列表是按相反的顺序进行的?为什么会发生这种情况?我能做什么?提前感谢!

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

您将用从左到右的每个新参数替换列表的头部。最后一个参数将是你的最后一个头。

因此,当您从头开始读取列表时,最后一个参数将是第一个,从而反转输入参数。

相关内容

  • 没有找到相关文章

最新更新