比较链表 c 中的节点

标签 c linked-list nodes alphabetical

struct link_node
{
    char node_str[ MAX_STR_LEN ];
    struct link_node *next;
};

int compare_node( struct link_node *n1, struct link_node *n2)
{
    if(n1[0] < n2[0])
    {
        return -1;
    }
    else if(n1[0] == n2[0])
    {
        return 0;
    }
    else
    {
        return 1;
    }
}

这是我目前用于比较链表中节点的第一个字母的代码。程序没有运行,所以我想确定代码中的错误在哪里。代码看起来没问题吗?请记住,错误可能出现在代码的其他位置。

最佳答案

您需要访问 structnode_str 元素。由于您将指向结构的指针传递到函数中,因此您可以使用 -> 表示法访问结构的元素,例如

int compare_node( struct link_node *n1, struct link_node *n2)
{
    if (n1->node_str[0] < n2->node_str[0])
        return -1;
    // etc...
}

通常,如果第一项小于第二项,则比较函数只需返回“小于 0”;如果两项相等,则返回“0”;如果第一项大于第二项,则返回“大于 0”。在这种情况下,您可以将比较函数简化为:

int compare_node( struct link_node *n1, struct link_node *n2)
{
    return n1->node_str[0] - n2->node_str[0];
}

这将对每个字符串的第一个字符进行比较。如果您想比较整个字符串,请使用 strcmp():

int compare_node( struct link_node *n1, struct link_node *n2)
{
    return strcmp(n1->node_str, n2->node_str);
}

关于比较链表 c 中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40580034/

相关文章:

r - igraph 中的颜色特定节点

c++ - 在 Qt (C++) 中使用第三方库 (libconfig)

c - 如何修改函数以便可以发送不带 & 的参数?

c - 反向双链表

复杂度为O(1)的单链表删除一个元素的算法

c - 将节点添加到链表中的随机位置

amazon-ec2 - 无法将节点添加到现有的 Cassandra 集群

c - $status 在 C shell 中指的是什么?

c - 我应该使用什么哈希从一组字符串中生成随机值

java - hashmap java中的链表