【发布时间】:2016-12-01 21:56:48
【问题描述】:
添加节点后,我正在尝试打印链接列表。我有一个虚拟节点来启动列表
Node **nodeArray;
nodeArray = malloc(10 * sizeof(Node *));
int i;
for (i = 0; i < 10; i++) {
nodeArray[i] = malloc(sizeof(Node));
}
if (userChoice == 'a')
add(&nodeArray, setNumber);
void add(Node ***nodeArray, int setNumber) {
char userString[5];
printf("Please enter some data: ");
scanf("%s", userString);
Node *head = *nodeArray[setNumber]; /* head pointer to first element of array (dummy) */
Node *newNode = malloc(sizeof(Node)); /* new node to be added to array */
strncpy(newNode->data, userString, sizeof(newNode->data)); /* copies string entered by the user to data field of new node */
newNode->next = NULL; /* initializes next field of new node to NULL */
Node *tmp = head; /* pointer to head of list */
while (!tmp->next) {
tmp->next = newNode; /* inserts new node into array */
tmp = newNode; /* points head to newly added node */
}
tmp = head; /* points tmp back to head of list */
printf("List is: ");
while (tmp->next) {
printf("%s", (tmp->data));
tmp = tmp->next;
}
}
但是当我打印时,我得到一个无限循环打印出新添加节点的数据字段。链接列表很糟糕......我做错了什么?
【问题讨论】:
-
请提供minimal reproducible example。不需要像讲故事一样讲。只需展示 MCVE,因为我们可以自己阅读这些简单的代码,无需逐块解释。并且全部在一个块中,因此任何人都可以更轻松地复制以在需要时尝试。
-
什么是
nodeArray?你是说Node *head = *Node[setNumber];吗? -
查看编辑了解详情。
标签: c linked-list