以升序插入节点

时间:2017-11-09 18:01:59

标签: c

我尝试按升序将包含字符串的节点插入到链表中。如果第一个元素的首字母高于其他字符串的首字母,则它可以工作。例如,

“Zeynep相识”

“锡兰”

“德米尔”

这种方式很好。 但是,如果第一个字符串的首字母小于列表中任何字符串的初始值,则它不会打印任何内容。

“阿里”

“Zeynep相识”

“锡兰”

这会腐败。  我跟踪了代码,但无法找到。

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;
    }
}

2 个答案:

答案 0 :(得分:1)

插入链表非常基本。这是一种方法:

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;
    }
}

答案 1 :(得分:0)

myList = List("A", "C", "G")
for {
  i <- myList
  j <- myList
  k <- myList
} yield List(i,j,k)

如果要将节点作为第一个元素,那么您忘记编写代码以将节点附加到列表的头部。我没试过,因为我没有完整的代码。试用。如果仍然无效,我请求发表评论。