第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用指針從單鏈列表中刪除項(xiàng)目

使用指針從單鏈列表中刪除項(xiàng)目

C
慕碼人8056858 2019-12-13 10:00:43
在最近的Slashdot訪談中, Linus Torvalds舉例說明了一些人如何使用指針,表明他們并不真正了解如何正確使用它們。不幸的是,由于我是他所談?wù)摰娜酥唬晕乙矡o法理解他的榜樣:我見過太多的人通過跟蹤“上一個(gè)”條目來刪除單鏈接列表?xiàng)l目,然后刪除該條目,例如if (prev)    prev->next = entry->next;else    list_head = entry->next;每當(dāng)我看到這樣的代碼時(shí),我都會(huì)說“這個(gè)人不理解指針”。可悲的是,這很普遍。理解指針的人只使用“指向入口指針的指針”,并使用list_head的地址對其進(jìn)行初始化。然后,當(dāng)他們遍歷列表時(shí),只需執(zhí)行以下操作即可刪除條目而無需使用任何條件*pp = entry->next有人可以提供更多有關(guān)這種方法為什么更好的解釋,以及在沒有條件語句的情況下如何工作的更多解釋嗎?
查看完整描述

3 回答

?
慕村225694

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊

一開始,您會(huì)


pp = &list_head;

并且,當(dāng)您遍歷列表時(shí),可以使用


pp = &(*pp)->next;

這樣,您始終可以跟蹤“您來自”的點(diǎn),并可以修改居住在那里的指針。


因此,當(dāng)您找到要?jiǎng)h除的條目時(shí),您可以


*pp = entry->next


這樣,您就可以處理Afaq在另一個(gè)答案中提到的所有3種情況,從而有效地消除了對的NULL檢查prev。


查看完整回答
反對 回復(fù) 2019-12-13
?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

我更喜歡虛擬節(jié)點(diǎn)方法,一種示例布局:


|Dummy|->|node1|->|node2|->|node3|->|node4|->|node5|->NULL

                                         ^        ^

                                          |        |

                                       curr   curr->next // << toDel

然后遍歷要?jiǎng)h除的節(jié)點(diǎn)(toDel = curr> next)


tmp = curr->next;

curr->next = curr->next-next;

free(tmp);

這樣,您無需檢查它是否是第一個(gè)元素,因?yàn)榈谝粋€(gè)元素始終是Dummy并且永遠(yuǎn)不會(huì)被刪除。


查看完整回答
反對 回復(fù) 2019-12-13
  • 3 回答
  • 0 關(guān)注
  • 501 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號