博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反转链表的golang实现
阅读量:6653 次
发布时间:2019-06-25

本文共 1154 字,大约阅读时间需要 3 分钟。

问题:反转一个单链表。

输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL

首先先认识一下链表这个数据结构:

链表节点中有两个元素:

  • 指针
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)
完整代码:
package mainimport "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)}

 

转载于:https://www.cnblogs.com/TimLiuDream/p/9932494.html

你可能感兴趣的文章
放大电路分析方法二
查看>>
[洛谷P5105]不强制在线的动态快速排序
查看>>
[洛谷P4735]最大异或和
查看>>
跟我学算法-贝叶斯拼写检查器
查看>>
Android使用动态代理搭建网络模块框架
查看>>
手写Function.bind函数
查看>>
这么多开源框架,该用哪个好?
查看>>
httpSecurity
查看>>
【Android】21.1 画板资源
查看>>
Sql 查询过慢,尝试重建索引
查看>>
雷林鹏分享:Yii(yiiframework)框架(三):gii页面出现403错误的解决方法
查看>>
第十二周CorelDRAW课总结
查看>>
【转】Android 环境变量 和 AVD 环境变量 配置
查看>>
[三]java8 函数式编程Stream 概念深入理解 Stream 运行原理 Stream设计思路
查看>>
【转】【SQL SERVER】怎样处理作业中的远程服务器错误(42000)
查看>>
jquery做表格变色效果-demo
查看>>
jquery 实现导航栏滑动效果
查看>>
linux系统下安装mysql数据库(mysql-5.7)
查看>>
MFC控件Slider Control的使用
查看>>
DOM的概念及子节点类型
查看>>