首页 > 解决方案 > 链表:试图改变节点的索引

问题描述

void changeIndex(FrameNode **head, int numOfFrames)
{
    int frameIndex = 0, i = 0;
    char name[STR_LEN];
    FrameNode* curr = *head;
    FrameNode* prev = NULL;
    FrameNode* nodeToChange = NULL;
    printf("Enter the name of the frame:\n");
    fgets(name, STR_LEN, stdin);
    name[strcspn(name, "\n")] = 0;
    while (!(searchFrame(head, numOfFrames, name)))
    {
        printf("Name is not exist in the list\n Please enter another name:");
        fgets(name, STR_LEN, stdin);
        name[strcspn(name, "\n")] = 0;
    }
    printf("Enter the index of the frame:\n");
    scanf("%d", &frameIndex);
    while (frameIndex > numOfFrames || frameIndex < 0)
    {   
        printf("Name is not exist in the list\n Please enter another name:");
        scanf("%d", &frameIndex);
    }
    getchar();
    while (curr != NULL && i < numOfFrames)
    {
        if (strcmp(name, curr->frame->name) == 0)
        {
            nodeToChange = createFrame(head, numOfFrames, curr->frame->path, curr->frame->duration, curr->frame->name);
            numOfFrames++;
            numOfFrames = deleteFrame(head, numOfFrames, curr->frame->name);
        }
        curr = curr->next;
        i++;
    }
    curr = *head;
    i = 0;
    if (*head != NULL)
    {
        while (i != frameIndex && curr->next != NULL)
        {
            prev = curr;
            curr = curr->next;
            i++;
        }
        prev->next = nodeToChange;
        nodeToChange->next = curr;
    }
    else
    {
        *head = nodeToChange;
    }
}

在这里,我试图通过名称更改节点的索引。我有一个内部有结构的节点。它给我一个错误,说prev = NULL即使我在第 4 次初始化它(正确的值设置在 中nodeToChange)。

所以我的问题是为什么会发生这种情况以及您如何建议我解决它?

标签: clinked-list

解决方案


对于 while 循环的值, i= 0然后frameindex=0条件失败,那么 thenprev已经是null并且您将要访问prev->next会引发错误。

i=0&&frameindex==0 为And 更新 while 循环的入口条件添加一个条件,而i<frameindex不是i!=frameindex


推荐阅读