链表-命令行参数

时间:2018-10-31 19:34:30

标签: c linked-list singly-linked-list

我正在尝试实现一个从命令行构建链接列表的程序。 我有两个功能,一个创建列表,另一个打印列表。 我的问题是,列表从列表中输出数据时是以相反的顺序进行的?为什么会这样呢?我能做什么?预先感谢!

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

2 个答案:

答案 0 :(得分:0)

您要用每个新参数替换列表的开头,从左到右读取。最后一个参数将是您的最后一个头。

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

答案 1 :(得分:0)

这里有一个错误

newNode = (struct Node*)malloc(sizeof(list));

sizeof(list)返回指针的大小,以获取想要的struct

的大小。

您在推动,相反,您需要排队(连接到尾巴,而不是头部)

这里有一个simple implementation

最后,不要sizeof(*list),传递给free(namePtr_)main)的参数不会被您的程序动态保留,规则是每个{{1 }}