首頁 > 後端開發 > Golang > 聊聊golang怎麼用遞歸實現反轉鍊錶

聊聊golang怎麼用遞歸實現反轉鍊錶

PHPz
發布: 2023-03-29 15:50:17
原創
1292 人瀏覽過

在golang中,反轉鍊錶可以使用遞歸來實作。在遞歸函數中,我們首先需要將目前節點的下一個節點作為參數傳入遞歸函數,然後讓目前節點指向下一個節點的下一個節點。最後傳回遞歸函數的回傳值,即新的頭節點。

以下是使用遞迴實作反轉鍊錶的golang程式碼:

type ListNode struct {
    Val int
    Next *ListNode
}
func reverseList(head *ListNode) *ListNode {
    if head == nil || head.Next == nil {
        return head
    }
    newHead := reverseList(head.Next)
    head.Next.Next = head
    head.Next = nil
    return newHead
}
登入後複製

我們先判斷如果頭節點或頭節點的下一個節點為nil,則直接回傳head。否則,我們呼叫遞歸函數,傳入head的下一個節點。接著,我們讓head的下一個節點指向head,然後將head的下一個節點置為nil。最後返回新的頭節點newHead。

我們可以使用以下的測試程式碼來驗證我們的函數是否正確:

// 测试代码
func main() {
    node1 := ListNode{Val: 1}
    node2 := ListNode{Val: 2}
    node3 := ListNode{Val: 3}
    node4 := ListNode{Val: 4}
    node5 := ListNode{Val: 5}
    
    node1.Next = &node2
    node2.Next = &node3
    node3.Next = &node4
    node4.Next = &node5
    
    fmt.Println("原链表:")
    printList(&node1)
    newHead := reverseList(&node1)
    fmt.Println("反转后的链表:")
    printList(newHead)
}
func printList(head *ListNode) {
    for p := head; p != nil; p = p.Next {
        fmt.Printf("%d ",p.Val)
    }
    fmt.Println()
}
登入後複製

運行結果如下:

原链表:
1 2 3 4 5 
反转后的链表:
5 4 3 2 1
登入後複製

從運行結果可以看出,我們的反轉鍊錶函數reverseList已經成功地將原來的鍊錶反轉了。

總結:

本文介紹如何透過遞迴函數來實現反轉鍊錶的golang程式碼。透過遞歸函數實現反轉鍊錶的程式碼簡潔易懂,並且容易理解。在實際工程中,我們可以根據需求選擇不同的方法實現反轉鍊錶。

以上是聊聊golang怎麼用遞歸實現反轉鍊錶的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板