檢查我的數據結構,以滿足一些新的工作面試要求。所以我有一個鏈表的刪除方法。public Link delete(int key) { Link current = first; Link previous = first; while(current.iData != key) { if(current.next == null) return null; else { previous = current; current = current.next; } } if(current == first) first = first.next; else // just bypass it previous.next = current.next; return current;}我想到目前為止我已經明白了。但我對這條線感到好奇。// just bypass itprevious.next = current.next;為什么我們不使用 覆蓋head(在本例中表示為first)previous?或者會是錯誤的邏輯嗎?喜歡// just bypass itprevious.next = current.next;first=previous;我的意思是previous和current只是迭代列表的指針。而刪除后的真實數據位于右側first?抱歉,如果這樣想會很奇怪。有時我奇怪的直覺只是在研究算法時出現,主要是因為我有點弱
1 回答

暮色呼如
TA貢獻1853條經驗 獲得超9個贊
這樣做會導致鏈表丟失前一個節點之前的所有節點。如果您有一個包含以下值的鏈接列表:
[1, 2, 3, 4, 5, 6, 7, 8]
當你打電話時delete(7)
,你的頭會指向6
,然后你就會得到一個 的鏈接列表[6, 8]
。
添加回答
舉報
0/150
提交
取消