这是
一段代码的一部分,但我会包括我认为重要的内容。实际上,我正在使用两种类型的链表。如您所见,第一个结构仅链接到列表的第一个节点。
这是第一个:
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;
}