從無頭單鏈表中刪除節點 結構之法 4

2022-07-24 04:42:08 字數 754 閱讀 7019

題目:

假設有乙個沒有頭指標的單鏈表。乙個指標指向此單鏈表中間的乙個節點(不是第乙個,也不是最後乙個節點),請將該節點從單鏈表中刪除。

分析與解答:

假設給定的指標為pcurrent,node *pnext=pcurrent->next(pnext指向pcurrent所指節點的下乙個節點。

我們由pcurrent指向b,pnext(pcurrent->next)指向c,同理pnext->next(pcurrent->next->next)指向d,不過不能簡單地刪除b,因為那樣會使得鍊錶被分割。

但是我們可以刪除c,並通過pcurrent->next=pcurrent->next->next重新使鍊錶連線,其中唯一丟失的是c中的data項。這時用c中的資料取代b中的資料項,讓b成為c,然後將真正指向c的指標刪除,這樣就達到了目的。

pcurrent->next=pnext->next;

pcurrent->data=pnext->data;

delete pnext;

其實指標不過是記憶體中的位址而已,當處理這類題目時,先畫出清晰的圖表會很有幫助。

擴充套件問題:

編寫乙個函式,給定乙個鍊錶的頭指標,要求只遍歷一次,將單鏈表中的元素順序反轉過來。

node *p=head->next;

node *e=null;

node *q;

while(p->next!=null)

從無頭單鏈表中刪除節點

題目 在乙個給定的單向鍊錶中,如何遍歷一次刪除特定的節點 解法 這是乙個典型的逆向思維問題,正常的刪除需要把當前節點的前面節點和後面節點鏈結起來,再刪除當前節點,完成任務。當前節點的後續節點比較容易得到,但困難的是無法得到當前節點的前面節點,逆向思維的結果是不刪除當前節點,而是將後面節點的資料拷貝到...

從無頭單鏈表中刪除節點

刪除無頭單鏈表 程式實現很簡單,主要是思路如果打不開的話,就無從下手。如果是帶有頭節點的鍊錶,直接從頭部遍歷,找到需要刪除的節點,然後直接刪除 刪除的方式,加入目前的節點為node 前乙個節點即為pre pre next node next delete node node null 但是目前沒有頭...

《程式設計之美》 從無頭單鏈表中刪除節點

問題 假設有乙個沒有頭指標的單鏈表。乙個指標指向此單鏈表中間的乙個節點 非第乙個節點,也非最後乙個節點 請將該節點從單鏈表中刪除。分析與解法 若要刪除該節點,正常情況下,應該要知道該節點的前面節點的指標,但是由於單鏈表中沒有頭結點,所以無法追溯到該節點前面的那個節點,因此,這裡採用了 狸貓換太子 的...