Home  >  Article  >  Backend Development  >  Let’s talk about how golang uses recursion to reverse linked lists

Let’s talk about how golang uses recursion to reverse linked lists

PHPz
PHPzOriginal
2023-03-29 15:42:111237browse

In golang, reversing the linked list can be implemented using recursion. In the recursive function, we first need to pass the next node of the current node into the recursive function as a parameter, and then let the current node point to the node next to the next node. Finally, the return value of the recursive function is returned, which is the new head node.

The following is the golang code that uses recursion to reverse the linked list:

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
}

We first determine if the head node or the next node of the head node is nil, then return head directly. Otherwise, we call the recursive function, passing in the next node of head. Next, we let the next node of head point to head, and then set the next node of head to nil. Finally, the new head node newHead is returned.

We can use the following test code to verify whether our function is correct:

// 测试代码
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()
}

The running results are as follows:

原链表:
1 2 3 4 5 
反转后的链表:
5 4 3 2 1

As can be seen from the running results, our inversion The linked list function reverseList has successfully reversed the original linked list.

Summary:

This article introduces how to implement the golang code of reversing the linked list through recursive functions. The code to reverse the linked list through a recursive function is concise, easy to understand, and easy to understand. In actual projects, we can choose different methods to implement the reverse linked list according to our needs.

The above is the detailed content of Let’s talk about how golang uses recursion to reverse linked lists. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn