【Golang】链表翻转,Golang实现
无道
2020-12-11
0 条评论
算法分享
阅读317
手机阅读
链表翻转
链表翻转,下面是最简单的一种链表翻转
基本上有两个方法:
- 递归版本
- 非递归版本(多指针)
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是真的大道至简呀!!
指针安全,默认零值可以让你少些不少代码。
全文完 [
支付宝打赏
微信打赏
]
有帮助?打赏


非特殊说明,本博所有文章均为博主原创。如若转载,请注明出处:https://misiyu.cn/article/163.html
这篇文章还没有评论呢~
It's me
昵称:无道
坐标:成都
性别:
一个人,一介学生,一个儿子~ 愿你我都被世界温暖以待

新建了个公众号,会不定期分享一些小玩意,有提升效率的办公软件、有一些黑科技的软件、或教程等等。
爷~,要不关注下~~
最新评论
点击排行
随机标签