zoukankan      html  css  js  c++  java
  • 反转链表的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)
    }
  • 相关阅读:
    Codechef之2014FebChallenge
    Codechef之CodeCraft: IIIT Hyderabad
    原创水题
    用图论模型解决dp问题
    [某模拟赛]一道好题
    萌新java入门笔记
    CodeForces 761C 【DP】
    POJ3268【最短路】
    POJ3191【(-2)进制本质】
    POJ3264 【RMQ基础题—ST-线段树】
  • 原文地址:https://www.cnblogs.com/TimLiuDream/p/9932494.html
Copyright © 2011-2022 走看看