前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Golang】链表翻转,Golang实现

【Golang】链表翻转,Golang实现

作者头像
无道
发布2020-12-15 12:01:42
9641
发布2020-12-15 12:01:42
举报
文章被收录于专栏:无道编程无道编程

链表翻转

链表翻转,下面是最简单的一种链表翻转

基本上有两个方法:

  • 递归版本
  • 非递归版本(多指针)
代码语言:javascript
复制
package main

import "fmt"

type Node struct {
    Element int
    Next    *Node
}

func (n *Node) Generate(num int) {
    tailNode := n
    for i := 0; i < num; i++ {
        node := &Node{Element: i + 1}
        tailNode.Next = node
        tailNode = node
    }
}

//Print 打印
func (n *Node) Print() {
    tailNode := n
    fmt.Println("======print======")
    for tailNode != nil {
        fmt.Printf("ele: %d\n", tailNode.Element)
        tailNode = tailNode.Next
    }
}

//Reverse1 双指针链表翻转
func (n *Node) Reverse1() *Node {
    cur := n
    var pre *Node

    for cur != nil {
        tmp := cur.Next
        cur.Next = pre
        pre = cur
        cur = tmp
    }
    return pre
}

//Reverse2 递归翻转
func (n *Node) Reverse2(head, pre *Node) *Node {
    if head == nil {
        return pre
    }

    res := n.Reverse2(head.Next, head)
    head.Next = pre

    return res
}

func main() {
    head := &Node{Element: 0}
    head.Generate(10)
    head.Print()
    head = head.Reverse1()
    head.Print()
    head = head.Reverse2(head, nil)
    head.Print()
}

可以看到Go是真的大道至简呀!!

指针安全,默认零值可以让你少些不少代码。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 链表翻转
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档