2017-05-08 3 views
0

Ich hatte gestern ein Interview. Als es begann, war das erste, was der InterviewerIn einer doppelt verknüpften Liste Wie viele Zeiger sind bei einer Einfügeoperation betroffen?

gefragt: „In einer doppelt verknüpften Liste, wie viele Zeiger auf einem Einsetzvorgang betroffen sein?“


Da hat er nicht ausdrücklich gefragt wo ich einfügen wollte, antwortete ich, dass es darauf ankommt, wie viele Knoten es in der DLL gibt.

Die Gesamtzahl der betroffenen Zeiger hängt davon ab, ob die Liste leer ist oder nicht und wo eingefügt wird.

Aber er sagte nichts, ob ich ihn überzeugt hatte oder nicht.

War ich richtig oder habe ich etwas übersehen?

+0

Ihre Frage ist unklar. Was * genau * bedeutet "betroffen"? Lesen? Geschrieben? Dereferenziert? Und was * genau * bedeutet "Insertion"? Beinhaltet es die Suche nach der einzufügenden Stelle oder bezieht es sich nur auf die * tatsächliche * Einfügeoperation? –

+0

@ JörgWMittag Ich denke "betroffen" bedeutet hier, dass wenn ich einfüge dann muss ich die Zeiger next und prev auf den neuen Knoten ändern. – Barry

Antwort

0

Ich denke, die Antwort hängt davon ab, ob wir den neuen Knoten in der Mitte der Liste (umgeben von zwei Knoten) oder am Anfang oder Ende der Liste einfügen.

Einfügungen in der Mitte der Liste, in einem neuen Knoten spleißen wie folgt:

A --- B 
    ^^ splice M in here 

A.next = M 
M.prev = A 
B.prev = M 
M.next = B 

Daher vier Zeigerzuweisungen erfolgen. Wenn jedoch die Einfügung am Anfang oder Ende erfolgt, wären nur zwei Zeigerzuordnungen erforderlich:

TAIL (insert M afterward) 

TAIL.next = M 
M.prev = TAIL 
+0

Also hängt es schließlich nicht von der Gesamtzahl der Knoten ab, oder? – Barry

+0

Die Anzahl der von Ihnen ausgeführten Zeigermathematik hängt nicht von der Anzahl der Knoten ab. Dies bedeutet jedoch nicht, dass die Laufzeit für das Einfügen in eine verknüpfte Liste nicht von der Größe der Liste abhängt. Für eine sortierte Liste würde es immer noch "O (N * lgN)" Zeit benötigen, um den Einfügepunkt zu finden, bevor wir die eigentliche Einfügeoperation begonnen haben. –

+0

Warum O (N * log N)? Für ein sortiertes * Array * kann es in O (log N) durch binäre Suche gemacht werden, für eine sortierte * Liste * sollte es nicht mehr als O (N) sein (im schlechtesten Fall müssen Sie alle Elemente betrachten). Mir ist nicht klar, wieso man im schlimmsten Fall mehr als alle Elemente betrachten müsste. –

Verwandte Themen