在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怎么用递归实现反转链表的详细内容。