」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > go 中反轉鍊錶

go 中反轉鍊錶

發佈於2024-07-31
瀏覽:215

Reverse a linked list in go

這是新開發人員最喜歡提出的問題。如果你有一個像樣的資料結構課程,那就很簡單了。

反轉單鍊錶。 (這是 Leetcode 206)

為了實現,我選擇將鍊錶設為泛型類型。

type Node[T any] struct {
    Data T
    Next *Node[T]
}

type LinkedList[T any] struct {
    Head *Node[T]
}

func (ll *LinkedList[T]) Append(data T) {
    newNode := &Node[T]{Data: data, Next: nil}

    if ll.Head == nil {
        ll.Head = newNode
        return
    }

    current := ll.Head
    for current.Next != nil {
        current = current.Next
    }
    current.Next = newNode
}

對於反向函數,透過認識到我們需要做的就是維護指向前一個節點的指針,然後將給定節點的「下一個」設定為前一個節點,只需一次傳遞即可完成。

當我們到達末尾時,我們就知道當前節點是列表的新「頭」。

func (ll *LinkedList[T]) ReverseLinkedList() {
    var prev *Node[T] = nil
    var ptr *Node[T] = ll.Head
    for ptr != nil {
        var next *Node[T] = ptr.Next
        ptr.Next = prev
        prev = ptr
        if next == nil {
            ll.Head = ptr
        }
        ptr = next
    }
}

我們是否錯過了邊界條件?如果清單現在是雙向鍊錶,會增加哪些複雜度?請在評論中告訴我。

謝謝!

這篇文章以及本系列所有文章的程式碼可以在這裡找到

版本聲明 本文轉載於:https://dev.to/johnscode/reverse-a-linked-list-in-go-583i?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何在 C++ 中定義靜態 const std::string 成員?
    如何在 C++ 中定義靜態 const std::string 成員?
    定義const std::string 類型的靜態資料成員在C 中,定義std::string 類型的私有靜態const 成員在類別內使用類別內初始化,如下所示,不符合C標準:class A { private: static const string RECTANGLE = &q...
    程式設計 發佈於2024-12-21
  • 使用 Uvicorn 在 FastAPI 中發出並發 HTTP 請求時如何避免「ConnectionClosed」錯誤?
    使用 Uvicorn 在 FastAPI 中發出並發 HTTP 請求時如何避免「ConnectionClosed」錯誤?
    在Uvicorn/FastAPI 中發出HTTP 請求處理使用FastAPI 和Uvicorn 建構的HTTP 端點時,通常會從外部要求資料。但是,在處理多個並發請求時,可能會出現「can't handle event type ConnectionClosed when role=SERV...
    程式設計 發佈於2024-12-21
  • 如何使用非標準憑證檔案在Go Web伺服器上建立HTTPS?
    如何使用非標準憑證檔案在Go Web伺服器上建立HTTPS?
    如何使用非標準憑證檔案在 Go Web 伺服器上建立 HTTPS提供的文件建議連接三個 .pem 檔案。但是,如果您沒有這些文件,以下是如何使用您擁有的證書文件設定HTTPS:組合中間證書:雖然Go 通常需要一個串聯的證書文件,其他平台僅儲存根憑證。為了確保相容性,請連接中間憑證:cat websi...
    程式設計 發佈於2024-12-21
  • 如何可靠地處理帶有子元素的絕對定位 div 上的滑鼠移出事件?
    如何可靠地處理帶有子元素的絕對定位 div 上的滑鼠移出事件?
    在沒有jQuery 的情況下處理帶有子元素的絕對Div 中的Mouseout 事件處理絕對定位的div 時,處理mouseout 事件可能具有挑戰性。預設情況下,如果滑鼠懸停在父 div 內的子元素上,則在滑鼠退出外部 div 之前,mouseout 事件會提前觸發。 要解決此問題,請考慮使用 on...
    程式設計 發佈於2024-12-21
  • PHP 的 `==` 和 `===` 運算子有什麼不同?
    PHP 的 `==` 和 `===` 運算子有什麼不同?
    PHP Double (==) 和 Triple (===) 相等比較有何不同? 在 PHP 中比較值時,兩個可以使用不同的運算子:鬆散相等 (==) 運算子和嚴格相同 (===) 運算子。了解它們的細微差別對於確保可靠的比較至關重要。 鬆散相等 (==) 比較鬆散相等運算子在比較值之前執行型別雜亂...
    程式設計 發佈於2024-12-21
  • 如何在 JavaScript 中對字串執行數學運算?
    如何在 JavaScript 中對字串執行數學運算?
    將字串轉換為數字進行數學運算儘管包含數字字符,但字串不能直接作為數字進行操作。要執行算術運算,必須先將它們轉換為數字形式。 考慮給出的例子:var num1 = '20', num2 = '30.5';直接添加這些字串會導致串聯:num1 num2; // '2030.5'要強制將它們視...
    程式設計 發佈於2024-12-21
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而非:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST陣列:表單提交後使用 var_dump 檢查 $_POST 陣列的內...
    程式設計 發佈於2024-12-21
  • 為什麼我的 Div 重疊?了解並解決保證金崩潰問題
    為什麼我的 Div 重疊?了解並解決保證金崩潰問題
    邊距折疊:理解並解決Div 佈局中的重疊設計具有多個div 元素的佈局時,理解邊距的概念至關重要折疊以避免不必要的重疊邊距。邊距折疊是一種 CSS 行為,當相鄰元素的邊距合併在一起時會發生,有效地增加了它們之間的總邊距空間。 邊距折疊的原因在您的具體情況,重疊邊距可能是由於以下CSS 規則的組合造成...
    程式設計 發佈於2024-12-21
  • 第一個 PHP 8.3 候選版本現已可測試
    第一個 PHP 8.3 候選版本現已可測試
    即將推出的 PHP 版本的第一個候選版本 PHP 8.3 現已可供測試。 第一個普遍可用的PHP 版本計劃於今年11 月23 日發布,PHP 8.3 的第一個候選版本是一個重要的預發布里程碑,因為它表明了PHP 8.3 的所有更改現在已經實現,只剩下完善和錯誤修復了。 在 11 月 23 日 ...
    程式設計 發佈於2024-12-21
  • 插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入記錄時如何解決「一般錯誤:2006 MySQL 伺服器已消失」介紹:將資料插入MySQL 資料庫有時會導致錯誤「一般錯誤:2006 MySQL 伺服器已消失」。當與伺服器的連線遺失時會出現此錯誤,通常是由於 MySQL 配置中的兩個變數之一所致。 解決方案:解決此錯誤的關鍵是調整wait_tim...
    程式設計 發佈於2024-12-21
  • 如何正確處理 JSON 資料中的換行符號?
    如何正確處理 JSON 資料中的換行符號?
    處理 JSON 中的換行符處理 JSON 資料時,必須正確處理換行符號以避免意外錯誤。以下是該問題及其解決方案的詳細說明。 問題使用eval 或JSON.parse 解析包含換行符的JSON 資料時,可能會遇到這樣的錯誤作為“未終止的字串文字” 。這是因為 JSON 中的雙引號字串中無法辨識換行符(...
    程式設計 發佈於2024-12-21
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-21
  • 您是否應該使用持久 PDO 連線:權衡效能效益與潛在風險?
    您是否應該使用持久 PDO 連線:權衡效能效益與潛在風險?
    使用持久PDO 連線的缺點:意外後果使用持久PDO 連線的缺點:意外後果雖然PDO 中的持久連線旨在透過快取和重複使用連線來增強效能,但它們可以還會引入可能影響效能的意外後果。 事務和連接狀態問題:持久連接的一個顯著缺點是意外的腳本終止會留下打開的連接,這可能會導致各種問題:鎖定表: 如果死腳本鎖定...
    程式設計 發佈於2024-12-21
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-12-21
  • 如何在 PHP 中顯示 MySQL BLOB 映像?
    如何在 PHP 中顯示 MySQL BLOB 映像?
    從MySQL 顯示PHP BLOB 影像背景在MySQL 資料庫中將影像作為二進位大物件(BLOB) 儲存和擷取是一種常見技術。然而,顯示這些圖像有時可能具有挑戰性。 解決方案解決方案插入映像:使用file_get_contents 函數讀取映像$query = "INSERT INTO ...
    程式設計 發佈於2024-12-21

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3