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)
    }
  • 相关阅读:
    ArcObjects SDK(AE)10.1在vs2012安装的方法(亲测,并未成功,尝试需谨慎)
    PTA 求链式表的表长
    PTA 输出数组元素
    PTA 找出不是两个数组共有的元素
    PTA 将数组中的数逆序存放
    PTA 利用指针找最大值
    PTA 有序数组的插入
    PTA 冒泡排序
    PTA 报数
    PTA 数组循环右移
  • 原文地址:https://www.cnblogs.com/TimLiuDream/p/9932494.html
Copyright © 2011-2022 走看看