所以这对我所在的课程来说是一个问题。规则是我们使用下面的代码作为我们的主要而不编辑。
int main(void) {
// a reference to the head of our list
node *head = NULL;
node ** list = &head;
// the nodes we will put in our list
node a = {6,NULL};
node b = {8,NULL};
node c = {4,NULL};
node d = {10,NULL};
node e = {2,NULL};
// build the list
append(list, &a);
append(list, &b);
prepend(list, &c);
append(list, &d);
prepend(list, &e);
// print the list
print(list);
// test the find function
int value;
for (value = 1; value <= 10; value++) {
node * found = find(list, value);
if (found == NULL)
printf("Node %d not found...\n", value);
else
printf("Found node %d!\n", found->content);
}
// test delete function
delete(list, 4);
delete(list, 8);
print(list);
return 0;
}
我们需要自己创建main中使用的所有函数。目前正在处理追加功能。有人告诉我,append函数应如下所示:append(node * list, node * new_node);
tydef stuct node_t {
int content;
struct node_t *next;
} node;
这就是我对节点声明所拥有的。
void append(node ** list, node * new_nodes) {
node ** current = list;
while ((*current)->next != NULL) {
(*current) = (*current)->next;
}
(*current)->next = new_node;
list = current;
}
这是我的追加功能。我相对肯定最后一行是错的,但我不知道如何开始。任何想法或建议都会很棒。
答案 0 :(得分:3)
考虑以下两行:
node *head = NULL;
node ** list = &head;
这使list
指向NULL
的指针。
然后考虑:
append(list, &a);
和(来自append
函数):
node ** current = list;
while ((*current)->next != NULL) {
您正在向指向NULL
append
函数的指针传递指针,这意味着*current
是指向NULL
的指针,然后您取消引用那个导致undefined behavior的NULL
指针和你的崩溃。
答案 1 :(得分:0)
头部和列表已经设置好了 - 如果列表== NULL,你必须首先解决。
void append(node ** list, node * new_nodes) {
node **current = list;
if (*current == NULL) {
*current = node;
return;
}
while ((*current)->next != NULL) {
(*current) = (*current)->next;
}
(*current)->next = new_node;
}
答案 2 :(得分:0)
由于list是按值传递的,因此您可以将其用作临时变量:
void append(node **list, node *new_node)
{
while(*list != NULL)
list = &((*list)->next);
*list = newNode;
}