从无头单链表中删除节点 结构之法 4
題目:
? ? 假設(shè)有一個(gè)沒有頭指針的單鏈表。一個(gè)指針指向此單鏈表中間的一個(gè)節(jié)點(diǎn)(不是第一個(gè),也不是最后一個(gè)節(jié)點(diǎn)),請(qǐng)將該節(jié)點(diǎn)從單鏈表中刪除。
分析與解答:
假設(shè)給定的指針為pCurrent,Node *pNext=pCurrent->next(pNext指向pCurrent所指節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)。
我們由pCurrent指向B,pNext(pCurrent->next)指向C,同理pNext->next(pCurrent->next->next)指向D,不過不能簡(jiǎn)單地刪除B,因?yàn)槟菢訒?huì)使得鏈表被分割。
但是我們可以刪除C,并通過pCurrent->next=pCurrent->next->next重新使鏈表連接,其中唯一丟失的是C中的data項(xiàng)。這時(shí)用C中的數(shù)據(jù)取代B中的數(shù)據(jù)項(xiàng),讓B成為C,然后將真正指向C的指針刪除,這樣就達(dá)到了目的。
pCurrent->next=pNext->next;
pCurrent->data=pNext->data;
delete pNext;
其實(shí)指針不過是內(nèi)存中的地址而已,當(dāng)處理這類題目時(shí),先畫出清晰的圖表會(huì)很有幫助。
?
?
擴(kuò)展問題:
編寫一個(gè)函數(shù),給定一個(gè)鏈表的頭指針,要求只遍歷一次,將單鏈表中的元素順序反轉(zhuǎn)過來。
Node *p=head->next;
Node *e=NULL;
Node *q;
while(p->next!=NULL)
{
q=p->next; //記錄下一個(gè)節(jié)點(diǎn)
p->next=e; //e記錄的是轉(zhuǎn)置之后的鏈表的第一個(gè)節(jié)點(diǎn),
e=p; //增加當(dāng)前節(jié)點(diǎn)為轉(zhuǎn)置的目標(biāo)鏈表的第一個(gè)節(jié)點(diǎn)
p=q; //待操作的鏈表的節(jié)點(diǎn)逐漸減少,目標(biāo)鏈表逐漸增加
}
轉(zhuǎn)載于:https://www.cnblogs.com/zdblog/p/3665531.html
總結(jié)
以上是生活随笔為你收集整理的从无头单链表中删除节点 结构之法 4的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript小数四舍五入
- 下一篇: java arraylist的问题