Golang 实现【链表反转】
题目
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 实现【链表反转】相关推荐
- python实现链表反转(转置)
python实现链表反转(转置) 链表是面试里面经常涉及到的考点,因为链表的结构相比于Hashmap.Hashtable.Concurrenthashmap或者图等数据结构简单许多,对于后者更多面试的 ...
- 每隔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 ...
- 数据结构1:单链表反转java代码解释
来源于尚硅谷的老师代码,只因其中有几行代码自己课上没听明白,课后自己整理了一下 首先完整代码如下: //将单链表反转 public static void reversetList(HeroNode ...
- bat面试题 python 单链表反转排序
单链表反转python实现 单链表的反转可以使用循环,也可以使用递归的方式 1.循环反转单链表
- 循环控制-链表反转(与创建链表)
0.目录 1.循环控制 2.Java代码实现 2.1 创建链表和递归反转实现 2.2 循环反转思路 2.3 链表反转的实现 2.4 测试用例 2.5 循环控制-创建链表 1.循环控制 循环书写方法: ...
- 27. Leetcode 92. 反转链表 II (链表-反转链表)
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right .请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 .示例 1 ...
- Interview:算法岗位面试—10.30上午上海某信息公司(偏图算法)技术面试之单链表反转、给定整型数组和目标值 二分法查找+下午上海某金融公司(AI岗位,上市)CTO和主管技术面试之Xcepti
ML岗位面试:10.30上午上海某信息公司(偏图算法)技术面试之单链表反转.给定整型数组和目标值 二分法查找+下午上海某金融公司(AI岗位,上市)CTO和主管技术面试之Xception.推荐算法等 I ...
- 看一遍就理解,图解单链表反转
前言 反转链表是程序员必备的基本素养,经常在面试.笔试的过程中出现.一直觉得反转链表实现代码不是很好理解,决定搬leetcode那道经典反转链表题出来,用十多张图去解析它,希望加深大家对链表反转的理解 ...
- java 链表反转_LeetCode206 实现单链表的反转
LeetCode206 实现单链表的反转 LeetCode 码,码不停题 1.题目介绍 Reverse a singly linked list. Example: Input:1->2-> ...
最新文章
- 【精简教程版】100行代码入手天池CV赛事
- TCP和UDP 粘包 消息保护边界
- 互联网协议 — HTTP/3 超文本传输协议第 3 版
- css处理超出文本截断问题的两种情况(多行或者单行)
- psd页面切割成html技巧总结
- 400页《TensorFlow 2.0 深度学习算法实战》中文版教材免费下载(附随书代码+pdf)...
- F#基础教程 列表
- [深度学习] PyTorch-BigGraph 使用
- markdown 流程图_Markdown 进阶技能:用代码画流程图(编程零基础也适用)
- 有趣的JS 一行代码 偷取所有图片
- hadoop 2.7.3 源码编译教程
- 专家访谈:谈谈数据挖掘技术
- 56个民族下拉选择框
- 使用IDO Runtime Development Server跟踪IDO层的错误
- 强力回击 跨境侵权(TRO)卖家通过诉讼大获全胜,还净赚数万?
- 记录安装python+appium+模拟器的自动化
- HBBuilderProjest逆向分析与安全性扯淡
- 常用的三种线性模型算法--线性回归模型、岭回归模型、套索回归模型
- 怎么使用Git远程删除某个历史提交记录
- ping 192.168.1.1-t命令有什么用?是什么意思?
热门文章
- 【BZOJ1934】【codevs2341】善意的投票,二分图最小割
- 在linux系统中如何查看cpu,Linux中如何查看CPU的信息
- 2017.9.22 middle 失败总结
- 2017.9.14 棘手的操作 思考记录
- 2017.9.8 仙人掌图 失败总结
- android ffmpeg编译so,Android FFmpeg学习(一),将FFmpeg编译成so文件
- 【英语学习】【Level 08】U01 Let's Read L5 You're a wizard, Harry.
- AliOS Things基于USB通道外接4G模组的方案
- python中迭代器和可迭代对象的区别_Python 可迭代对象迭代器生成器的区别
- python中的列表理解_掌握『Python列表理解』需要知道的9件事,你知道了吗?