從無頭單鏈表中刪除某節點(程式設計之美3 4)

2021-06-18 13:13:48 字數 558 閱讀 5684

1. 題目:乙個無頭單向鍊錶,有乙個指標指向其中的乙個節點(非第乙個與最後乙個節點),請問如何刪除此節點。

典型解法為「狸貓換太子」,刪除乙個鍊錶節點,需要知道節點的前驅節點,但是當前無法知道,當前節點為下乙個節點的前驅,因此可以將下乙個節點的值賦給當前節點,然後刪除下乙個節點。

pcur->next=pnext->next;

pcur->data=pnext->data;

delete pnext;

2. 類似問題:乙個無頭單向鍊錶,指標p指向其中乙個節點,在當前節點前面插入乙個新節點q。

在p後面插入節點q,然後交換值。

q->next=p->next;

p->next=q;

swap(&q->data, &p->data);

3. 擴充套件問題:對單向鍊錶遍歷一遍,實現鍊錶翻轉。

node* reverse(node *head)

return head;

}

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

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

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

1.問題描述 假設有乙個沒有頭指標的單鏈表。乙個指標指向此單鏈表中間的乙個節點 不是第乙個,也不是最後乙個 請將該節點從單鏈表中刪除。如下圖所示 2.分析與解法 假設給定的指標為pcurrent,node pnext pcurren next 其中pcurren next!null,如下圖,因為沒有...

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

假設有乙個沒有頭指標的單鏈表,乙個指標指向此單鏈表中間的乙個節點 不是第乙個,也不是最後乙個節點 請將該節點從單鏈表中刪除。作者巧妙地把刪除無頭單鏈表節點的問題做了轉換,把要刪除的節點的下乙個節點中的資料部分傳遞給此節點,然後再刪除下乙個節點。可見,在不影響效率和複雜度的前提下,我們完全可以不受題目...