【问题标题】:How do I send the linked list as a function argument如何将链表作为函数参数发送
【发布时间】:2021-07-07 00:08:46
【问题描述】:

...
typedef struct _dbDLinkedList
{
        Node * head;
        Node * tail;
        Node * cur;
        int numOfData;
} DBDLinkedList;

typedef DBDLinkedList List;
...

int main(void)
{

        ...
        List list;
        int data;
        ListInit(&list);

        for(i=0; i<ID_LEN; i++)
                LInsert(&list, new_id[i]);

        solution(list, data);
        ...
}

int solution(List list, int data)
{
     ...
     if(LFirst(&list, &data))
     {
            int i=1;

            if(data==46)
                    LRemove(&list);

            i++;

            while(LNext(&list, &data))
            {
                   if(i==numOfData)
                          if(data==46)
                                 LRemove(&list);

                   i++;
            }
     }
     ...
      
}

我使用了虚拟节点双向链表。 当我编译这个项目时,发生了错误: 'numOfData' 未声明(在此函数中首次使用)。

我不习惯使用链表。 如何将链表作为函数参数发送(对于解决方案())?

【问题讨论】:

    标签: c linux linked-list doubly-linked-list


    【解决方案1】:

    据我所知,问题可能不在于将链表作为函数参数发送。在“if(i==numOfData)”中,您正在尝试访问 numOfData,它是“List”结构的一部分,因此您需要通过“List”变量访问它......也许替换该行带有“if(i == list.numOfData)”之类的代码就可以解决问题

    【讨论】:

    • 你是我的救星。非常感谢。
    • erehwyrevemai,如果这是您正在寻找的答案,您应该将其标记为已接受。
    【解决方案2】:

    numOfData 不是变量。您很可能打算访问当前节点的 numOfData 成员。

    但您确实不需要直接访问该成员。 LNext 似乎很可能(没有看到代码)将该值放入您的 data 变量中——这就是您将 &amp;data 作为参数传递给 LNext 的原因。

    这给我们带来了代码中的另一个问题。你用data 调用solution,但你从来没有给data 一个值。如果打算删除值为 46 的节点,则主程序应调用 solution,如下所示:

    solution(list, 46);
    

    solution应该是这样实现的:

    int solution(List list, int dataToRemove) {
        if (!LFirst(&list, &data)) {
            return 0;  // to indicate that value to delete was not found
        }
        while (data != dataToRemove) {
            if (!LNext(&list, &data)) {
                return 0;  // to indicate that value to delete was not found
            }
        }
        LRemove(&list);
        return 1; // to indicate success
    }
    

    【讨论】:

    • 'value 46' 只是条件之一。我没有上传我的所有代码,所以它的信息不足。您的评论并不完全适合我的代码,但我非常感谢您的建议。谢谢你,trincot!
    • 这是我能用所提供的信息做的最好的事情。如果您的问题没有得到解答,那么也许您可以编辑您的问题并添加其他信息。例如,尚不清楚您作为参数传递给 solution 的未初始化的 data 值有什么用处。
    猜你喜欢
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    相关资源
    最近更新 更多