2016-05-13 9 views
0

In meiner Suche nach Algorithmen aus Interviewfragen zu erfahren, fand ich das wirklich interessant.Lösche einen Knoten aus einer verknüpften Liste, gegeben die Indexposition, aber beginnend am Ende

Im Grunde ging es darum, einen Knoten am Index zu entfernen, aber am Ende der verketteten Liste zu beginnen. Und in einer Schleife.

Ich dachte, dass Sie 2 Schleifen benötigen, eins die Länge der Liste kennen, ein anderes den Knoten zu löschen, beginnend am Ende, aber dann dachte ich, dass eine verkettete Liste sowieso sequentiell ist, also sollte eine Schleife funktionieren .

Wie würden Sie das am einfachsten angehen? Ich habe es mit Python versucht; Sie können eine einfache Liste erstellen und die Operation in 4 Zeilen ausführen; Aber wenn Sie in einem Interview sind, möchten sie normalerweise, dass Sie "alles von Hand" machen, ohne Sprachkürzel zu verwenden.

+3

Verwenden Sie 2 Zeiger p1 und p2. in der Schleife, zuerst nur p1 um Indexzeiten vorwärts. Dann vorrücken beide bis zum Ende der Schleife, d. H. Bis p1 das Ende der Liste erreicht. Zu diesem Zeitpunkt zeigt p2 auf den Knoten im Entfernungsindex vom Ende und Sie können ihn löschen. – trans1st0r

+0

Ich sehe, so der erste Zeiger verfolgen den globalen Index, während der zweite bei Index -n beginnen? Ich habe nicht darüber nachgedacht; das ist ein wirklich guter Weg, eine Schleife zu machen! –

+0

das ist richtig, achten Sie auf Off-by-1 Fehler in diesem, stellen Sie sicher, dass Sie den richtigen Knoten löschen und den Fall behandeln, wenn die Länge der Liste kleiner ist als die angegebene Indexposition. – trans1st0r

Antwort

0
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) { 
    struct ListNode *temp = head; 
    int length = 0; 
while(temp->next!=NULL){ 
    temp = temp->next; 
    length++; 
} 
temp = head; 
while(length!= n+1){ 
    temp = temp->next; 
    length--; 
} 
temp->next = temp->next->next; 
return head; 

}

EDIT: zunächst i die Länge der verketteten Liste am Berechnen ersten while-Schleife verwenden und dann bin ich dekrementiere, dass die Länge, bis i die Knoten vor dem genannten Knoten unter Verwendung des zweiten, während erreichen Schleife, dann lösche ich einfach den Knoten und gebe den Kopf zurück;

+0

stellen Sie eine Frage oder beantworten Sie die Frage? Wenn Sie antworten, fügen Sie bitte eine Erklärung hinzu. – surajsn

+1

es ist eine Antwort, ich werde die Erklärung hinzufügen :) – user6422197

Verwandte Themen