c - 我在链表中计算名字的函数有什么问题


这是

一段代码的一部分,但我会包括我认为重要的内容。实际上,我正在使用两种类型的链表。如您所见,第一个结构仅链接到列表的第一个节点。

这是第一个:

typedef struct mlist {
    Node *headFirstName;
    Node *headLastName;
} MultiLinkedList;

这是第二个:

typedef struct node {
    char *first;
    char *last;
    long number;
    struct node *nextFirst;
    struct node *nextLast;
} Node;

以下是当前将名称和编号添加到列表中的方式:

MultiLinkedList *add(MultiLinkedList *list, char *first, char *last, long num) {
    // allocate a new node
    Node *newNode = malloc ( sizeof(Node) );
    newNode->first = malloc ( strlen(first) + 1 );
    strcpy(newNode->first, first);
    newNode->last = malloc ( strlen(last) + 1 );
    strcpy(newNode->last, last);
    newNode->number = num;
    // add this new node at the head of the "byFirst" list
    newNode->nextFirst = list->headFirstName;
    list->headFirstName = newNode;
    // add this new node at the head of the "byLast" list
    newNode->nextLast = list->headLastName;
    list->headLastName = newNode;
    // return the multi-list object with updated head pointers
    return list;
}

以下是我目前尝试计算列表中名称的方式:

int size(MultiLinkedList *list) {
    int count = 0;
    Node *newNode = malloc ( sizeof(Node) );
    newNode->nextFirst = list->headFirstName;
    newNode->nextLast = list->headLastName;
    while (newNode->nextFirst!=NULL) {
            count++;
    }
    // return the number of names in the list
    return count;
}

如果像这样遍历多个列表有一个特定的名称,那么有人可以指导我吗?

  • 您应该使用size_t作为大小
  • 你的malloc()没用
  • 如果你不做类似的地方x = x->next你想要你的循环完成吗?

size_t size(MultiLinkedList *list) {
    size_t count = 0;
    for (Node *i = list->headFirstName; i; i = i->next) {
        count++;
    }
    // return the number of names in the list
    return count;
}

相关内容

  • 没有找到相关文章

最新更新