C语言 从已创建的节点创建链表.得到赛格错误



所以这对我所在的班级来说是一个问题。规定是我们使用以下代码作为主要代码,而无需对其进行编辑

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(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;
}

这是我的追加函数。我相对确定最后一行是错误的,但我不知所措。任何想法或建议都会很棒。

考虑以下两行:

node *head = NULL;
node ** list = &head;

这使得list指向指向NULL的指针。

然后考虑:

append(list, &a);

和(从append函数):

node ** current = list;
while ((*current)->next != NULL) {

您正在传递指向指向append函数NULL指针的指针,这意味着*current是指向NULL的指针,然后取消引用该指针NULL从而导致未定义的行为和崩溃。

由于列表是按值传递的,因此您可以将其用作临时变量:

void append(node **list, node *new_node)
{
    while(*list != NULL)
        list = &((*list)->next);
    *list = newNode;
}

尚未设置头部和列表 - 您必须首先检查列表 == 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;
 }

相关内容

  • 没有找到相关文章

最新更新