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

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

在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
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!