本文摘自php中文网,作者藏色散人,侵删。
问题:反转一个单链表。
1 2 | 输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
|
首先先认识一下链表这个数据结构:
链表节点中有两个元素:
1 2 3 4 | type ListNode struct {
Val int
Next *ListNode
}
|
Next指向下一个节点
那么这道题其实就是把指针指向前一个节点
位置调换次数 | pre | cur | whole |
---|
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)
完整代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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)
}
|
更多golang相关技术文章,请访问golang教程栏目!
以上就是一文讲解golang怎么实现反转链表的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
golang依赖注入工具wire指南
手撸golang 结构型设计模式 代理模式
详解go内联优化
go指针
golang 开发的 web 有哪些框架?
go语言的魔幻旅程35-go的单元测试
docker 概述
golang官方限流器的用法详解
go语言学习9-结构体类型
go微服务开发入门
更多相关阅读请进入《golang》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » 一文讲解golang怎么实现反转链表