Как вставить строку в связанный список на языке c? - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь вставить строку userId, если она еще не существует в связанном списке.Это мой код:

Node *insertLL(Node **ppHead, User user){

    Node *pPrecedes;
    Node *pNew;
    Node *pNext;
    Node *pFind;
    int pHead;
    Fillup fillup; //file with user information

    //searches for the user
    pFind= searchLL(*ppHead, fillup.szUserId, &pPrecedes);

    if(pFind == NULL)   
    {
        return allocateNode(user);      

        if (strcmp(pPrecedes->user.szUserId, pFind)!= 0) //pFind seems wrong
            pNew->pNext = pPrecedes->pNext;
        else
            pNew->pNext = pPrecedes->pNext;
            pPrecedes->pNext = pNew;

    }
    return pNew;
}

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

что-то не так с опубликованным кодом, которые, безусловно, не помогают

if(pFind == NULL)   
{
    return allocateNode(user);      <<< == nothing will be executed after this line

    if (strcmp(pPrecedes->user.szUserId, pFind)!= 0) //pFind seems wrong
        pNew->pNext = pPrecedes->pNext;
    else   
        pNew->pNext = pPrecedes->pNext;
        pPrecedes->pNext = pNew;  <<<<< == should this line be dependant on the else above. The indentation says yes but there are no braces

}

и да, я знаю, я пойду на голосование, потому что это «не ответ» - что угодно, я приму удар, просто чтобы посмотреть, смогу ли я помочь

0 голосов
/ 14 ноября 2018

Я выяснил правильный код для этого !!! Я должен был упомянуть об этом, но у меня была другая функция searchLL, которая уже сравнивала и искала пользователя, поэтому strcmp был ненужным. Мне пришлось сделать 2 новых if-заявления. Тот, где, если строка уже существует, она просто возвращает эту строку. Другое в случае, если строка должна быть вставлена ​​в начале, где она не имеет предыдущей строки. Мне также пришлось освободить место для моей новой строки. Узел * insertLL (Узел ** ppHead, Пользователь пользователя) {

Node *pPrecedes;
Node *pNew;
Node *pNext;
Node *pFind;    

//searches the user //searchLL is a differen't function
pFind= searchLL(*ppHead, user.szUserId, &pPrecedes);

if (pFind!= NULL) //if pFind already exists
    return pFind;   

    pNew=allocateNode(user);//get space for pNew

if(pFind == NULL) //if pFind doesn't exist insert pFind
{
    //insert at the beginning
    if(pPrecedes == NULL) //if there is no pPrecedes
    {
        pNew->pNext = *ppHead; //pNew's next will be the head
        *ppHead = pNew; //pNew is now the new head
    }
    //insert in the middle
    else
    {
        pNew->pNext = pPrecedes->pNext; 
        pPrecedes->pNext = pNew;
    }
}
return pNew; 

}

0 голосов
/ 13 ноября 2018

В line 19 (если я считал правильно), в противном случае нет {}, но есть 2 строки кода.Второе утверждение выполняется, даже если strcmp правильно, измените его и посмотрите, работает ли оно.

...