从无头单链表中删除节点 结构之法 4
題目:
? ? 假設有一個沒有頭指針的單鏈表。一個指針指向此單鏈表中間的一個節點(不是第一個,也不是最后一個節點),請將該節點從單鏈表中刪除。
分析與解答:
假設給定的指針為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)
{
q=p->next; //記錄下一個節點
p->next=e; //e記錄的是轉置之后的鏈表的第一個節點,
e=p; //增加當前節點為轉置的目標鏈表的第一個節點
p=q; //待操作的鏈表的節點逐漸減少,目標鏈表逐漸增加
}
轉載于:https://www.cnblogs.com/zdblog/p/3665531.html
總結
以上是生活随笔為你收集整理的从无头单链表中删除节点 结构之法 4的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript小数四舍五入
- 下一篇: java arraylist的问题