【发布时间】:2017-11-09 18:01:58
【问题描述】:
我尝试将包含字符串的节点按升序插入到链表中。如果第一个元素的首字母高于字符串的其他首字母,它会起作用。例如,
“泽尼普”
“锡兰”
“德米尔”
这种方式效果很好。 但是,如果第一个字符串的首字母小于列表中任何字符串的首字母,则不会打印任何内容。
“阿里”
“泽尼普”
“锡兰”
这会损坏。 我跟踪了代码但找不到。
struct friendNode
{
char firstName[30];
char lastName[30];
char gender[1];
char birthYear[10];
struct friendNode *next;
};
struct friendRecord
{
struct friendNode *head;
struct friendNode *tail;
int size;
};
void insertFriend(struct friendNode *node, struct friendRecord *list)
{
struct friendNode *temp_node;
temp_node = list->head;
if(temp_node->next == NULL)
{
temp_node->next = node;
list->tail = node;
}
else
{
while(strcmp(node->firstName, temp_node->next->firstName) >= 0 )
temp_node = temp_node->next;
if(temp_node->next == NULL)
{
temp_node->next = node;
list->tail = node;
return;
}
node->next = temp_node->next;
temp_node->next = node;
}
}
【问题讨论】:
-
显示结构体friendNode和结构体friendRecord声明。
-
当列表为空时,
list->head是否会成为NULL?因为在这种情况下,您似乎使用if(temp_node->next == NULL)取消引用空指针。也许你想要if(temp_node == NULL) { list->head = node; list->tail = node; }。
标签: c