• 技术文章 >后端开发 >Golang

    一文讲解golang怎么实现反转链表

    藏色散人藏色散人2021-07-19 14:37:17转载129

    问题:反转一个单链表。

    输入: 1->2->3->4->5->NULL
    输出: 5->4->3->2->1->NULL

    首先先认识一下链表这个数据结构:

    链表节点中有两个元素:

    type ListNode struct {
        Val  int
        Next *ListNode
    }

    Next指向下一个节点

    那么这道题其实就是把指针指向前一个节点

    位置调换次数precurwhole
    0nil1->2->3->4->51->2->3->4->5
    11->nil2->-3>->4->52->3->4->5->1->nil
    22->1->nil3->4->53->4->5->2->1->nil
    33->2->1->nil4->54->5->3->2->1->nil
    44->3->2->1->nil55->4->3->2->1->nil

    可以看出来

    完整代码:
    package main
    
    import "fmt"
    
    //链表节点
    type ListNode struct {
        Val  int
        Next *ListNode
    }
    
    //反转链表的实现
    func reversrList(head *ListNode) *ListNode {
        cur := head
        var pre *ListNode = nil
        for cur != nil {
            pre, cur, cur.Next = cur, cur.Next, pre //这句话最重要
        }
        return pre
    }
    
    func main() {
        head := new(ListNode)
        head.Val = 1
        ln2 := new(ListNode)
        ln2.Val = 2
        ln3 := new(ListNode)
        ln3.Val = 3
        ln4 := new(ListNode)
        ln4.Val = 4
        ln5 := new(ListNode)
        ln5.Val = 5
        head.Next = ln2
        ln2.Next = ln3
        ln3.Next = ln4
        ln4.Next = ln5
    
        pre := reversrList(head)
        fmt.Println(pre)
    }

    更多golang相关技术文章,请访问golang教程栏目!

    以上就是一文讲解golang怎么实现反转链表的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:cnblogs,如有侵犯,请联系admin@php.cn删除
    专题推荐:golang
    上一篇:一文了解golang slice和string的重用 下一篇:解析Golang怎么创建守护进程和平滑重启
    VIP会员

    相关文章推荐

    • golang的极简流式编程• 分享Golang中一个好用的viper配置模块• 案例分享:基于golang的支付宝支付• 一文了解golang slice和string的重用

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网