您好,欢迎访问一九零五行业门户网

聊聊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怎么用递归实现反转链表的详细内容。
其它类似信息

推荐信息