题目

Golang 实现【链表反转】 如何反转一个单链表。

题目示例

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

链表结构


type ListNode struct {Val intNext *ListNode
}

第一种实现

解题思路:

利用指针交互的思路

复杂度分析:

时间复杂度 O(N) : 遍历链表使用线性大小时间。

空间复杂度 O(1): 变量 pre 和 cur 使用常数大小额外空间。

func reverseList(cur *ListNode) *ListNode {if cur == nil {return nil}var pre *ListNodefor cur!=nil {//获取下个节点temptemp:=cur.Next//因要翻转,故cur.next=pre 下一个节点等于前一个节点cur.Next=pre//将当前节点赋值给前节点pre=cur//将temp节点赋值给当前节点,用于继续往下执行cur=temp//平行赋值语法  可读性差//cur.Next,pre,cur=pre,cur,cur.Next}return pre
}

第二种实现

解题思路:

利用递归思路实现

复杂度分析:

时间复杂度 O(N): 遍历链表使用线性大小时间。
空间复杂度 O(N): 遍历链表的递归深度达到 NN ,系统使用 O(N)O(N) 大小额外空间。


func reverseListV2(head *ListNode) *ListNode {if head == nil {return nil}//初始时,pre为nilreturn recur(head,nil)
}func recur(cur,pre *ListNode) *ListNode  {//当前cur为nil 说明到了尾节点if cur == nil {return pre}//递归反转,故下个节点,即当前节点,当前节点为前节点res:=recur(cur.Next,cur)//将前节点,赋值给cur.Nextcur.Next=prereturn res
}

Golang解题代码


type ListNode struct {Val intNext *ListNode
}func TestListNode(t *testing.T){head := new(ListNode)head.Val = 1ln2 := new(ListNode)ln2.Val = 2ln3 := new(ListNode)ln3.Val = 3ln4 := new(ListNode)ln4.Val = 4ln5 := new(ListNode)ln5.Val = 5head.Next = ln2ln2.Next = ln3ln3.Next = ln4ln4.Next=ln5//Println(reverseList(head))Println(reverseListV2(head))
}func Println(list *ListNode)  {for list!=nil{fmt.Printf("val:%v ",list.Val)list = list.Next}
}
func reverseList(cur *ListNode) *ListNode {if cur == nil {return nil}var pre *ListNodefor cur!=nil {//获取下个节点temptemp:=cur.Next//因要翻转,故cur.next=pre 下一个节点等于前一个节点cur.Next=pre//将当前节点赋值给前节点pre=cur//将temp节点赋值给当前节点,用于继续往下执行cur=temp//平行赋值语法  可读性差//cur.Next,pre,cur=pre,cur,cur.Next}return pre
}func reverseListV2(head *ListNode) *ListNode {if head == nil {return nil}//初始时,pre为nilreturn recur(head,nil)
}func recur(cur,pre *ListNode) *ListNode  {//当前cur为nil 说明到了尾节点if cur == nil {return pre}//递归反转,故下个节点,即当前节点,当前节点为前节点res:=recur(cur.Next,cur)//将前节点,赋值给cur.Nextcur.Next=prereturn res
}

结果验证

Golang 实现【链表反转】相关推荐

  1. python实现链表反转(转置)

    python实现链表反转(转置) 链表是面试里面经常涉及到的考点,因为链表的结构相比于Hashmap.Hashtable.Concurrenthashmap或者图等数据结构简单许多,对于后者更多面试的 ...

  2. 每隔k次反转一次 链表_PTA 5-2 Reversing Linked List (25) [法一] - 线性表 - 链表反转 (PAT 1074)...

    Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...

  3. 数据结构1:单链表反转java代码解释

    来源于尚硅谷的老师代码,只因其中有几行代码自己课上没听明白,课后自己整理了一下 首先完整代码如下: //将单链表反转 public static void reversetList(HeroNode ...

  4. bat面试题 python 单链表反转排序

    单链表反转python实现 单链表的反转可以使用循环,也可以使用递归的方式 1.循环反转单链表

  5. 循环控制-链表反转(与创建链表)

    0.目录 1.循环控制 2.Java代码实现 2.1 创建链表和递归反转实现 2.2 循环反转思路 2.3 链表反转的实现 2.4 测试用例 2.5 循环控制-创建链表 1.循环控制 循环书写方法: ...

  6. 27. Leetcode 92. 反转链表 II (链表-反转链表)

    给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right .请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 .示例 1 ...

  7. Interview:算法岗位面试—10.30上午上海某信息公司(偏图算法)技术面试之单链表反转、给定整型数组和目标值 二分法查找+下午上海某金融公司(AI岗位,上市)CTO和主管技术面试之Xcepti

    ML岗位面试:10.30上午上海某信息公司(偏图算法)技术面试之单链表反转.给定整型数组和目标值 二分法查找+下午上海某金融公司(AI岗位,上市)CTO和主管技术面试之Xception.推荐算法等 I ...

  8. 看一遍就理解,图解单链表反转

    前言 反转链表是程序员必备的基本素养,经常在面试.笔试的过程中出现.一直觉得反转链表实现代码不是很好理解,决定搬leetcode那道经典反转链表题出来,用十多张图去解析它,希望加深大家对链表反转的理解 ...

  9. java 链表反转_LeetCode206 实现单链表的反转

    LeetCode206 实现单链表的反转 LeetCode 码,码不停题 1.题目介绍 Reverse a singly linked list. Example: Input:1->2-> ...

最新文章

  1. 【精简教程版】100行代码入手天池CV赛事
  2. TCP和UDP 粘包 消息保护边界
  3. 互联网协议 — HTTP/3 超文本传输协议第 3 版
  4. css处理超出文本截断问题的两种情况(多行或者单行)
  5. psd页面切割成html技巧总结
  6. 400页《TensorFlow 2.0 深度学习算法实战》中文版教材免费下载(附随书代码+pdf)...
  7. F#基础教程 列表
  8. [深度学习] PyTorch-BigGraph 使用
  9. markdown 流程图_Markdown 进阶技能:用代码画流程图(编程零基础也适用)
  10. 有趣的JS 一行代码 偷取所有图片
  11. hadoop 2.7.3 源码编译教程
  12. 专家访谈:谈谈数据挖掘技术
  13. 56个民族下拉选择框
  14. 使用IDO Runtime Development Server跟踪IDO层的错误
  15. 强力回击 跨境侵权(TRO)卖家通过诉讼大获全胜,还净赚数万?
  16. 记录安装python+appium+模拟器的自动化
  17. HBBuilderProjest逆向分析与安全性扯淡
  18. 常用的三种线性模型算法--线性回归模型、岭回归模型、套索回归模型
  19. 怎么使用Git远程删除某个历史提交记录
  20. ping 192.168.1.1-t命令有什么用?是什么意思?

热门文章

  1. 【BZOJ1934】【codevs2341】善意的投票,二分图最小割
  2. 在linux系统中如何查看cpu,Linux中如何查看CPU的信息
  3. 2017.9.22 middle 失败总结
  4. 2017.9.14 棘手的操作 思考记录
  5. 2017.9.8 仙人掌图 失败总结
  6. android ffmpeg编译so,Android FFmpeg学习(一),将FFmpeg编译成so文件
  7. 【英语学习】【Level 08】U01 Let's Read L5 You're a wizard, Harry.
  8. AliOS Things基于USB通道外接4G模组的方案
  9. python中迭代器和可迭代对象的区别_Python 可迭代对象迭代器生成器的区别
  10. python中的列表理解_掌握『Python列表理解』需要知道的9件事,你知道了吗?