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->next
niet null is, maar na toewijzing
runner = runner->next->next;
runner
kan 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->next
die 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->next
kan 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 oprunner->next->next!=NULL
en pak het recht
Antwoord.
Happy Codering: & GT;)