C 链表 - 令人惊叹的程序

标签 c linked-list boggle

我希望我能在这里重新审视我的代码。我正在做一项任务,该任务是 Boggle 游戏的开始。基本前提是我们有一个包含 96 个字符的文本文件,我们的程序将分别读取这些字符并将它们作为节点添加到线性链表中,然后将每个项目复制到另一个线性链表中,该线性链表将放置每个骰子上有 6 个字符,总共 16 个骰子。我已经让大多数函数正常工作,除了下面的函数,它假设采用包含所有 96 个字符的线性链表(struct boggleDataNode)并将每个字符复制到第二个线性链表(struct boggleDieSideNode)。函数中的第三个参数假设是被复制的字符的索引。我在下面包含了我的主要功能,以便您可以查看实现。任何见解或指导将不胜感激,因为我目前迷路了!

void addBoggleDieSide(struct boggleDataNode *head1, struct boggleDieSideNode *head2, int index)
{
    int i = 0;

    struct boggleDieSideNode *temp = NULL;
    struct boggleDieSideNode *right = NULL;

    struct boggleDataNode *helper = NULL;

    temp = (struct boggleDieSideNode *)malloc(sizeof(struct boggleDieSideNode));

    helper = (struct boggleDataNode *)malloc(sizeof(struct boggleDataNode));

    helper = head1;

    for(i = 0; i <= index; i++)
    {
        helper = helper->nextData;
    }

    strcpy(temp->dieSideData, helper->data);

    temp->nextSide = NULL;

    if (head2 == NULL)
    {
        head2 = temp;
    }
    else
    {
        right = head2;

        while(right->nextSide != NULL)
        {
            right = right->nextSide;
        }

        right->nextSide = temp;
     }

     return;
 }







int main()
{
    int counter = 0;
    int i = 1;

    struct boggleDataNode *head1 = NULL;
    struct boggleDieSideNode *head2 = NULL;

    // Reads in original text file to boggleDataNode linked list
    read(&head1);

    // Displays boggleDataNode linked list
    displayDataFile(head1);

    for(i = 1; i <= 16; i++)
    {
        // Clears die that was just created in loop and starts a new die
        head2 = NULL;

        for(i = 1; i <= 6; i++)
        {
            addBoggleDieSide(head1, head2, counter);
            counter++;
        }

        // Displays values on each die
        displayDieSide(head2);
     }

     return 0;
}

最佳答案

(head2 == NULL) 情况没有达到您的预期。 head2 = temp 仅设置 head2本地值。一旦函数返回,该值就会丢失。调用者的 head2 未设置,因此它将始终为 NULL。

你的函数应该传入一个指向头指针的指针。像这样的东西:

void addBoggleDieSide(struct boggleDataNode *head1, struct boggleDieSideNode **head2, int index)
{
   ...
   if (*head2 == NULL)
   {
       *head2 = temp;
   }
   ...
}

main()
{
    ...
    addBoggleDieSide(head1, &head2, counter);
    ...
}

关于C 链表 - 令人惊叹的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31065506/

相关文章:

C: fgets 构建char*链表的用法

c - 在我的 TCP 连接中,客户端发送 Hello,但服务器收到 Hellob

c++ - 按位运算比较数字?

c - Xcode 链接器错误(重复符号),而 gcc 工作正常

java - 如何使用动态编程找到 Boggle board 上的所有单词?

java - 调试递归方法来查找单词是否存在于滑板中

python - 简单地初始化变量会出错?

android - 在 Android Studio 上将您自己的库与 JNA 结合使用

java - 在递归函数中初始化变量

java - 根据用户输入从LinkedList获取值