C链表不兼容的指针类型

C linked list incompatible pointer type

struct list_node {
    int value;
    struct list_node *next;
};

struct linked_list {
    int size;
    struct list_node *head;
};

void print_linked_list(struct linked_list *list){
    struct linked_list *current = list;

    while(current != NULL){
        printf("%d ", current->head->value);
        current = current->head->next;
    }
}

我必须定义一个函数来打印链表,但我收到一条错误消息,指出“不兼容的指针类型”。我知道问题出在“current = current->head->next;”但我怎样才能做到这一点?

currentstruct linked_list*,但 current->head->nextstruct list_node*

struct linked_liststruct list_node 是两个不同的不相关结构,尽管它们很相似。

您不能将指针分配给不同的类型,因此出现错误消息 不兼容的指针类型

你可能想要这个:

void print_linked_list(struct linked_list* list) {
  struct list_node* current = list->head;

  while (current != NULL) {
    printf("%d ", current->value);
    current = current->next;
  }
}

函数

void print_linked_list(struct linked_list *list){
    struct linked_list *current = list;

    while(current != NULL){
        printf("%d ", current->head->value);
        current = current->head->next;
    }
}

没有意义。

在此声明中

current = current->head->next;

指针 current 的类型为 struct linked_list * 而表达式 current->head->next 的类型为 struct list_node *.

你的意思好像是

void print_linked_list( const struct linked_list *list )
{
    if ( list != NULL )
    {
        for ( const struct list_node *current = list->head; current != NULL; current = current->next )
        {
            printf( "%d ", current->value );
        }
    }
}