2017-05-08 45 views
0

昨天我接受了採訪。當它啓動時,第一件事情就是面試官問的是在雙向鏈表中,插入操作會影響多少個指針?

「在一個雙向鏈表,有多少指針將在插入操作的影響?」


因爲,他沒有具體要求在哪裏插入我回答說,這取決於DLL中有多少個節點。

由於將受到影響的總指針將取決於列表是否爲空以及插入發生的位置。

但是,他沒有說我是否說服了他。

我是對的還是我錯過了什麼?

+0

您的問題尚不清楚。什麼*精確*「受影響」是什麼意思?讀?書面?提領?而「插入」的意思是什麼?它是否包含搜索要插入的位置,還是僅引用* actual *插入操作? –

+0

@JörgWMittag我猜這裏的「影響」意味着,當我插入時,我必須改變指針next和prev到新節點。 – Barry

回答

0

我認爲答案取決於我們是將新節點插入列表中間(由兩個節點包圍)還是列表的頭部或尾部。

對於列表中的中間插入,在一個新的節點以拼接如下:

A --- B 
    ^^ splice M in here 

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

因此4指針分配發生。但是,如果插入位於頭部或尾部,則只需要兩個指針分配:

TAIL (insert M afterward) 

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

所以,畢竟它並不取決於節點的總數,對吧? – Barry

+0

你所做的指針數學的數量並不取決於節點的數量。但是,這並不是說插入鏈表的運行時間不取決於列表的大小。相反,對於排序列表,它仍然需要'O(N * lgN)'時間才能找到插入點_before_,我們甚至開始了實際的插入操作。 –

+0

爲什麼O(N * log N)?對於一個有排序的*數組*,它可以通過二進制搜索在O(logN)中完成,對於排序的*列表*,它不應該超過O(N)(最糟糕的情況是,您需要查看所有元素)。我不清楚爲什麼在最糟糕的情況下你需要考慮更多的因素。 –