我試圖在我的類中編寫一個函數,該函數接受一個節點並在雙向鏈表中直接刪除該節點。我有單獨的功能,刪除第一個或最後一個節點,所以這只是在中間節點的情況下。我認爲它的邏輯是合理的,我的代碼編譯了,但是當我嘗試測試它時,程序永遠不會停止運行,所以我認爲它在while循環中停滯不前。我也不確定我是否正確地調用了該函數。在名爲DLL
的雙向鏈表中,由1
,2
,3
和4
填充,我試圖通過將DLL.removeAfter(2)
放在主體中來刪除3
。我看到這在邏輯上有缺陷,因爲列表中可能有多個2
,但我不知道什麼是正確的。在雙向鏈表中的給定節點之後刪除節點
void DoublyLinkedList::removeAfter(const DListNode &p)
{
DListNode *node = header.next;
while(node != &p)
{
node->next; //iterate to p;
}
node->next; //Get to the node after p that is to be deleted
node->prev->next = node->next;
node->next->prev = node->prev;
delete node;
}
謝謝,這是有道理的。我實施了這一改變。我如何調用這個函數? – claire
你可以編輯你的帖子來顯示你如何實例化你的'DoublyLinkedList'類並調用函數嗎? – Matt
感謝您的幫助!現在一切正常。 – claire