Leetcode143. 重排链表 (golang描述)
问题描述
思路简述
链表的题目主要考察coding基本功,思路难度都不算太大,这道的思路也很简单,而且链表的题目如果出现在面试一般都要求原地操作空间复杂度O(1),尽量不用容器;
首先快慢指针找到链表的中点(奇数个节点时中点,偶数节点时上中点),然后对中点后的节点原地逆置,将逆置后的链表backup以后将中点的Next置空,随后重新组装链表即可。
代码描述
/*** Definition for singly-linked list.* type ListNode struct {* Val int* Next *ListNode* }*/// 逆序head之后的链表
func reverseList(head *ListNode) *ListNode{if head.Next == nil || head.Next.Next == nil{return head}p, temp := head.Next, head.Next.Nextfor temp != nil{backup := head.Nexthead.Next = tempp.Next = temp.Nexttemp.Next = backuptemp = p.Next}return head
}func reorderList(head *ListNode) {if head == nil || head.Next == nil{return}// 奇数找到中点 偶数找到上中点low, fast := head, headfor fast.Next != nil && fast.Next.Next != nil{low = low.Nextfast = fast.Next.Next}// 反转low之后的节点R := reverseList(low)backup, help := R.Next, R.NextR.Next = nilfor help.Next!=nil{help = help.Next}help.Next = RR = backupL := headdummyNode := new(ListNode)var rearPointer *ListNode = dummyNodefor L != nil && R != nil{rearPointer.Next = LL = L.NextrearPointer = rearPointer.Nextif R == rearPointer{break}rearPointer.Next = RR = R.NextrearPointer = rearPointer.Next}rearPointer.Next = nil}
Leetcode143. 重排链表 (golang描述)相关推荐
- leetcode143 重排链表
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例 1: 给定链表 1->2->3->4, 重新排列为 1->4->2->3. 示例 2: 给定链 ...
- 【LeetCode笔记】143. 重排链表(Java、链表、栈、快慢指针)
文章目录 题目描述 思路 & 代码 更新版:快慢指针 + 翻转链表 题目描述 一看题目反序:用栈 更新:O(1) 空间复杂度 思路 & 代码 先快慢指针,找到需要入栈的起点,然后逐个入 ...
- 【区块反转】【链表合并】【反转链表】【链表元素分类】【链表去重】【重排链表】
目录 说明: 1110 区块反转 输入格式: 输出格式: 输入样例: 输出样例: 1105 链表合并 输入格式: 输出格式: 输入样例: 输出样例: 1025 反转链表 输入格式: 输出格式: 输入样 ...
- 【每日一算法】重排链表
微信改版,加星标不迷路! 每日一算法-重排链表 作者:阿广 阅读目录 ? 题目 ? 解析 ? 完整代码 1 题目 给定一个单链表 L:L0→L1→-→Ln-1→Ln , 将其重新排列后变为: L0→L ...
- LeetCode-笔记-143. 重排链表
LeetCode-笔记-143. 重排链表 143. 重排链表 给定一个单链表 L:L0→L1→-→L**n-1→Ln , 将其重新排列后变为: L0→L**n→L1→L**n-1→L2→L**n-2 ...
- Java多重链表_Java实现 LeetCode 143 重排链表
143. 重排链表 给定一个单链表 L:L0→L1→-→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节 ...
- 【CCCC】L2-022 重排链表 (25分),,链表遍历
problem L2-022 重排链表 (25分) 给定一个单链表 L 1 →L 2 →⋯→L n−1 →L n ,请编写程序将链表重新排列为 L n →L ...
- 重排链表-c语言链表法解决
重排链表-c语言链表法解决 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → - → Ln - 1 → Ln 请将其重新排列后变为: L0 → Ln → L1 → L ...
- 【L2-022 重排链表】天梯赛L2系列详细解答
天梯赛L2-022 重排链表 题目详情: 输入样例: 00100 6 00000 4 99999 00100 1 12309 68237 6 -1 33218 3 00000 99999 5 6823 ...
最新文章
- LTE Paging时频资源
- HDU 3625 Examining the Rooms【第一类斯特灵数】
- 图解用MySQL创建进销存数据库
- Python + logging 输出到屏幕,将log日志写入文件(亲测)
- tomcat相关配置技巧梳理 (修改站点目录、多项目部署、限制ip访问、大文件上传超时等)...
- 微信处罚腾讯判定其滥用原创:不要惹我 我狠起来能铁锅炖自己!
- 互联网行业不需要中年人,那些35岁离开BAT的人都去哪了?
- 软件工程 第六章 编码与测试
- 分期手续费转换为年化利率
- 【计算机软件基础】如何理解鲁棒性Robust?
- 计算机课做名片怎么做,小学信息技术名片DIY教案设计
- jQuery插件开发实战
- python if实现对话_Python生成微信对话生成器(四)
- 用机器学习做风控的氪信,凭什么获金牌投资人章苏阳数千万融资?
- 104.android 简单的检查小米、华为、OPPO、VIVO手机系统是否打开通话自动录音功能,跳转通话录音页面,安卓怎么检查开启通话自动录音,安卓开启自动录音
- 用Android做的一个简单的视频播放器
- python 使用七牛云cdn
- VMware-WorkStation 序列号(转)
- mongoDB数据库的安装与配置
- 水星UD6S网卡Linux驱动,水星UD6S驱动程序官方版
热门文章
- 声学信号频谱图分类(十三)
- Android Studio 2.3报错: Error:Cause: buildToolsVersion is not specified解决
- AudioTrack到AudioFlinger流程分析(三十八)
- android MemeoryFile和Parcel操作文件描述符fd
- qchart 怎么点击一下 出一条线_疏通身上一条线,很多难缠病,不知不觉消失了!...
- linux替换字符串 正则,Linux 字符串操作-裁剪和正则替换
- MySQL中table_schema的基本操作
- java 1.7图片压缩_appium+java(七)图片的放到及缩小操作
- map.setTerrain is not a function
- mysql5.7 json特性_mysql5.7新增加的JSON数据类型特征介绍