聊聊golang怎么用递归实现反转链表
在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怎么用递归实现反转链表的详细内容,更多请关注其它相关文章!
相关文章