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

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

Golang LinkedList 刪除第一個元素

Golang LinkedList 刪除第一個元素

C#
慕田峪9158850 2022-11-23 10:27:06
我正在嘗試從頭開始在 Golang 中實現 LinkedList 操作。但是我在處理刪除第一個元素時發現了一個問題。我的方法是使用 OOP 樣式,但似乎沒有刪除第一個元素。這是我寫的代碼type LinkedList struct {    Value int    next  *LinkedList}func (ll *LinkedList) Remove(index int) error {    pointer := ll    var pointerPrev *LinkedList = nil    current := 0    for current < index {        pointerPrev = pointer        pointer = pointer.next        current++    }    if pointer == ll {        ll = ll.next // this line is problematic        pointer = nil    } else {        if pointer.next == nil {            pointerPrev.next = nil        } else {            pointerPrev.next = pointer.next            pointer = nil        }    }    return nil}有什么建議我如何實現這種刪除方式而不返回新的 LinkedList 指針嗎?
查看完整描述

1 回答

?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

一切都作為副本傳遞,因此只有傳遞指向它的指針才能更改某些內容,并且修改指向的值。

因此,如果不返回新的列表頭(您必須在調用者處分配),您就無法做您想做的事情。

另一種方法是傳遞頭指針的地址( 的類型**LinkedList),這很丑陋(必須始終傳遞頭指針的地址)。您還可以添加一個單獨的方法來刪除第一個元素,例如RemoveFirst(),這樣您只需傳遞給此方法即可。這RemoveFirst()也可以返回調用者必須分配的新頭。這RemoveFirst()也可以是“常規”函數而不是方法。

另一種選擇是為列表創建一個包裝器,它包含一個指向頭部的指針。你在包裝器上實現方法,而不是在節點類型上。包裝器的一種方法可以更改保存頭指針的字段。

參見相關:Can the pointer in a struct pointer method be reassigned to another instance?


查看完整回答
反對 回復 2022-11-23
  • 1 回答
  • 0 關注
  • 206 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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