亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從 LinkedList 中刪除中間節點?

如何從 LinkedList 中刪除中間節點?

拉風的咖菲貓 2024-01-05 16:21:04
我試圖從有權訪問該節點的鏈表中刪除中間節點。我想知道下面的兩種方法是否有區別,或者它們完成相同的事情嗎?public boolean deleteMiddle(Node middle){    Node next = middle.next; //line 2    middle.data = next.data;    middle.next = next.next;    return true;}public boolean deleteMiddle(Node middle){    middle.data = middle.next.data;    middle.next = middle.next.next;    return true;}第一種方法是教科書推薦的方法,但似乎在第一種方法(第 2 行)中創建“下一個”節點是不必要的代碼行。
查看完整描述

3 回答

?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

我認為你可能是對的,它們是等價的(或者看起來確實是這樣)

在這兩種情況下,如果要刪除的項目是列表中的最后一項(例如,如果 next 為 null,則 next.next 是錯誤),則看起來會出現空指針異常(在 next.next 上)。

如果你通過了 null,當然這也將成為 NPE。


查看完整回答
反對 回復 2024-01-05
?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

在第一個方法(第 2 行)中創建節點“next”是不必要的代碼行。

兩個片段都達到相同的結果。

但是額外的變量賦值(它不會“創建節點”,它只是為現有節點分配一個新名稱)所做的是避免調用middle.next兩次,避免兩次執行相同的“計算”。

在此示例中,這不會產生任何真正的區別,但一般來說,它可以是一種常見的性能優化,以避免冗余工作(特別是如果涉及執行一些“繁重工作”的方法調用)。不過,在進行這些冒險之前,應該考慮是否值得讓代碼變得不太易讀,特別是考慮到 JVM 將嘗試自動進行各種優化。因此,僅將這種心態應用于簡單的模式或真正的瓶頸。

最重要的是,為中間結果命名也可以產生更多不言自明的代碼(這里也沒有太大區別)。

最后的評論:有時(但不是這里)有必要引入額外的變量來臨時存儲一些東西,否則這些東西會在操作過程中被覆蓋,例如著名的int h = x; x = y; y = h;例子。


查看完整回答
反對 回復 2024-01-05
?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

是的,它們是等價的。我更喜歡第一個,因為它避免了表達式的重復middle.next

正如@Rick 指出的,當middle是最后一個元素時,在這兩種情況下你都會得到一個 NPE。


查看完整回答
反對 回復 2024-01-05
  • 3 回答
  • 0 關注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號