Lid-toegang binnen NULL-aanwijzer van Type ‘Struct ListNode’

Ik beoefende een interviewcode die vrij eenvoudig leek te zijn. Ik moet een bool retourneren die bepaalt of de singly-linked lijst al dan niet een cyclus heeft. Ik heb twee Pointers Walker gemaakt die 1 stap en hardloper beweegt die 2 stappen elke iteratie beweegt.

Maar dan gaf deze code me een foutmelding:

Line 15: member access within null pointer of type 'struct ListNode'

Wat veroorzaakt deze fout?


Antwoord 1, Autoriteit 100%

U zorgt alleen voor dat runner->nextniet null is, maar na toewijzing

runner = runner->next->next;

runnerkan null worden.


Antwoord 2

Dit zou het moeten oplossen:

bool hasCycle(ListNode *head) {
    if(head == NULL || head->next == NULL) { return false; }
    struct ListNode * walker = new ListNode(1);
    struct ListNode * runner = new ListNode(2);
    walker = head;
    runner = walker->next;
    while(walker != fast){
        if(runner == NULL || runner->next == NULL) { return false; }
        walker = walker->next;
        runner = runner->next->next;
    }
    return true;
}

Antwoord 3

// – Als een lus van cirkelvormig pad dan honderd% kans is dat ze op een gegeven moment zullen ontmoeten, nemen we hier een wandelaar die een stap en een hardloper beweegt die twee stap zet.

bool hasCycle(ListNode *head){
if(head == NULL || head->next == NULL)
       return false; 
struct ListNode *temp  = head; 
struct ListNode *walker; 
struct ListNode *runner;
walker = runner= head;
while(temp ){
  walker = walker->next;
  runner = runner->next->next;
    if(runner == walker) // as soon both get at same address we got return as 
     true value.
     { return True; }
    temp = temp->next;
}
return false;

}


Antwoord 4

De onderstaande code zou goed moeten werken.
Het is de klassieke Hare-Tortoise Theorem, waar de haas 2 stappen (afstandseenheden) duurt terwijl de schildpad duurt met 1.

Ik denk dat je de nietigheid van runner->next->nextdie deze fout

heeft veroorzaakt

bool hasCycle(ListNode *head) 
{
    if(head == NULL || head->next == NULL) 
    { 
       return false;
    }
    ListNode* tortoise=new ListNode();
    ListNode* hare = new ListNode();
    tortoise=head;
    hare=tortoise->next;
    while(tortoise != hare)
    {
        if(hare == NULL || hare->next == NULL) 
        { 
           return false; 
        }
        tortoise=tortoise->next;
        hare=hare->next->next;
    }
    return true;
}

Antwoord 5

Sorteerantwoord is hier met uitleg

Het retourneert de fout omdat runner=runner->next->nextkan null zijn
En je controleert runner- & GT; volgende! = NULL IN TERWIJLD TIJDENS CONTAATSEN DIE JE
moet een beetje veranderen in uw code om uw antwoord in te krijgen
Terwijl voorwaarde controleert op runner->next->next!=NULLen pak het recht
Antwoord.

Happy Codering: & GT;)

Other episodes