• 反转链表的golang实现


    问题:反转一个单链表。

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

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

    链表节点中有两个元素:

    • 指针
    type ListNode struct {
        Val  int
        Next *ListNode
    }

    Next指向下一个节点

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

    位置调换次数precurwhole
    0 nil 1->2->3->4->5 1->2->3->4->5
    1 1->nil 2->-3>->4->5 2->3->4->5->1->nil
    2 2->1->nil 3->4->5 3->4->5->2->1->nil
    3 3->2->1->nil 4->5 4->5->3->2->1->nil
    4 4->3->2->1->nil 5 5->4->3->2->1->nil

    可以看出来

    • pre是cur的最前面那位(pre = cur)
    • cur就是当前位的后面链表元素(cur = cur.Next)
    • cur.Next肯定是接pre(cur.Next = pre)
    完整代码:
    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)
    }
  • 相关阅读:
    开源程序postGIS为postgresql提供存储空间地理数据的支持
    oracle官方文档
    postgresql转换符
    【转】oracle的Interval类型详解
    [转]千万不要把灯泡放进嘴里
    服务器运维指令
    莫名其妙的时区问题
    Linux内存思想
    oracle提高查询效率24法
    哈佛大学图书馆凌晨4点的景象
  • 原文地址:https://www.cnblogs.com/TimLiuDream/p/9932494.html
Copyright © 2020-2023  润新知