我尝试将包含字符串的节点按升序插入到链表中。如果第一个元素的首字母高于字符串的其他首字母,则该方法有效。例如,
“泽内普”
“锡兰”
“德米尔”
这个方法效果很好。 但是,如果第一个字符串的首字母小于列表中任何字符串的首字母,则不会打印任何内容。
“阿里”
“泽内普”
“锡兰”
这会腐败。 我追踪了代码但找不到。
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;
}
}
最佳答案
插入链表是非常基本的事情。这是一种方法:
void insertFriend(struct friendNode *node, struct friendRecord *list)
{
struct friendNode *pre = NULL;
struct friendNode *post = list->head;
while (post && strcmp(node->firstName, post->firstName) >= 0)
{
pre = post;
post = post->next;
}
if (pre == NULL)
{
list->head = node;
}
else
{
pre->next = node;
}
node->next = post;
if (post == NULL)
{
list->tail = node;
}
}
关于c - 按升序插入节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47208668/