leetcode 234. 回文链表 golang实现

题234. 回文链表 Java class Solution { public boolean isPalindrome(ListNode head) { if(head==null){ return true; } if(head.next==null){ return true; } ListNode pre=null; ListNode slow=head;... 阅读详情
描述
请判断一个链表是否为回文链表。

示例 1:

输入: 1->2
输出: false
示例 2:

输入: 1->2->2->1
输出: true
进阶:
你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
思路
1. 利用快慢指针 找到链表的中间节点
2. 满指针在遍历的时候将前半部分的链表反转
3. p1 p2 分别指向中间节点开始遍历判断是否相等

1 -> 2 -> 2 -> 1  反转后 1 <- 2  2-> 1 p1=2 p2=2
1 -> 2 -> 0 -> 2 -> 1 反转后 1 <- 2  0->2->1  p1=2 p2 = 2
实现
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func isPalindrome(head *ListNode) bool {
	if head == nil || head.Next == nil{
		return true
	}

	slow := head
	fast := head.Next // 这里必须是从fast=head.Next 开始 
	var pre *ListNode
	var prepre *ListNode

	for fast != nil && fast.Next != nil{
		prepre = pre
		pre = slow

		slow = slow.Next
		fast = fast.Next.Next

		pre.Next = prepre
	}
	
	//  slow即为中间节点 此时 pre 和pre之间都已反转 slow还没有指向pre 因为我们还需要通过slow找到后面的节点

	var p1 *ListNode
	var p2 *ListNode
	// 这里根据fast == nil 还是fast.Next == nil 可以判断链表节点是奇数还是偶数
	if fast == nil{     // 奇数
		p2 = slow.Next  // 奇数个 则p2 为中间节点的Next
		p1 = pre        // p1 为中间节点的上一个
		
	}else{              // fast.Next == nil 偶数个
		p2 = slow.Next  // p2 为中间节点slow的下一个
		p1 = slow       // p1 为slow
		slow.Next = pre // 将slow节点指向slow的上一个节点
	}

	for p1 != nil{
		if p1.Val != p2.Val{
			return false
		}

		p1 = p1.Next
		p2 = p2.Next
	}

	return true
}
LeetCode - #234 回文链表(Top 100) 本题为 LeetCode 前 100 高频题我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。LeetCode 算法到目前我们已经更新到 232 期,我们会保持更新时间和进度(周一、周三、周五早上 9:00 发布),每期的内容不多,我们希望大家可以在上班路上阅读,长久积累会有很大提升。不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。 阅读详情

相关推荐

ISP调试工程师相关面试问题_001

Qualcomm、MTK等ISP pipeline的框架原理及算法原理,还有调试经验。

notgoodenouf的博客 3547

leetcode | go | 第234题 | 回文链表

【代码】leetcode | go | 第234题 | 回文链表。

iCling的博客 157

VHDL实战:基于EDA的数字频率计(FREQ)设计与优化

本文详细介绍了使用VHDL语言和EDA工具设计并优化数字频率计(FREQ)的全过程。从核心原理与模块划分入手,深入讲解了时钟分频、测频控制、计数锁存及显示驱动等关键模块的VHDL实现,并提供了从代码编写、功能仿真到综合布局布线的完整EDA实战指南。文章还探讨了测量精度优化、资源权衡及跨时钟域处理等进阶话题,是掌握FPGA数字系统设计的经典案例。

milk8的博客 583

LeetCode234. 回文链表Golang版

LeetCode234. 回文链表Golang版 1. 问题描述 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 2. 思路 利用快慢指针,找到链表中间位置。 将链表后半段反转。 进行回文数的比较。 3. 代码 /** * Definition for singly-linked list. * type ListNode struct { * Val int *

菜到不敢run 289

【Seurat绘图进阶】从参数调优到美学定制:解锁DimPlot与FeaturePlot的隐藏技巧

本文深入探讨了Seurat包中DimPlot与FeaturePlot的进阶使用技巧,旨在解决单细胞数据可视化中的常见痛点。通过参数调优(如order、shuffle、raster)、颜色美学定制(使用RColorBrewer、viridis配色)以及性能优化(栅格化处理),并结合scCustomize包与patchwork排版,帮助用户将基础图表提升为信息清晰、可直接用于论文发表的出版级可视化结果。

lake5的博客 628

Keil 编译输出信息分析:Program size: Code, RO-data , RW-data, ZI-data

一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM,RAM 相当于内存,Flash 相当于硬盘。编译器会将一个程序分类为好几个部分,分别存储在 MCU 不同的存储区。如图所示,在Keil中编译工程成功后,在下面的Bulid Ouput窗口中会输出下面这样一段信息。

qq_40305944的博客 4578

Golang | Leetcode Golang题解之第234题回文链表

Golang | Leetcode Golang题解之第234题回文链表

weixin_66442839的博客 536

D触发器版图设计的艺术:最小化面积与最大化性能的平衡之道

本文探讨了D触发器版图设计中如何平衡最小化面积与最大化性能的核心挑战。通过分析晶体管布局、互联优化、时钟分布等关键策略,结合先进制程下的功耗与信号完整性考量,为数字IC工程师提供了从基础优化到制造验证的实用解决方案,助力实现高性能、低面积的芯片设计。

aa123的博客 909

回文链表Go语言实现

【代码】回文链表Go语言实现。

qq_44231964的博客 190

R 分析裂区试验设计

裂区试验有主区部分和副区部分, 因而有主区部分误差(误差 a,简记为Ea )和副区部分误差(误差b,简记为Eb) 分别用于测验主区处理以及副区处理和主、副互作的显著性。对同一个二因素试验资料作自由度和平方和的分解,则可发现随机区组的误差项自由度和平方和分别为DFe、SSe,而裂区设计有两个误差项,其自由度和平方和分别为DFEa,DFEb, SSEa, SSEb。而区组,处理效应等各个变异项目的自由

samhuairen的专栏 8934

机器人动力学仿真软件:V-REP (CoppeliaSim)_(15).仿真项目案例分析

通过以上几个具体的仿真项目案例,我们展示了如何在V-REP (CoppeliaSim)中进行二次开发,实现复杂的机器人动力学仿真任务。这些案例涵盖了六轴机械臂的运动学仿真、移动机器人的路径规划和避障、以及无人机的飞行控制和环境感知。每个项目都通过编写Lua脚本实现了对机器人模型的控制和任务执行,并通过仿真结果分析验证了算法的有效性和系统性能。希望这些案例能够为读者在实际项目中使用V-REP (CoppeliaSim)提供有益的参考和启发。

kkchenjj的博客 1294

[Golang]力扣LeetBook—初级算法—链表—回文链表(快慢指针)

[Golang]力扣LeetBook—初级算法—链表—回文链表(快慢指针) 题目:给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 链接: 力扣LeetBook—初级算法—链表—回文链表. 示例 1: 输入:head = [1,2,2,1] 输出:true 示例 2: 输入:head = [1,2] 输出:false 标签:栈、递归、链表、双指针 思路: 循环遍历链表,快指针每次走两个节点,慢指针每次走一个节点,当快指针遍历

皮埃尔的博客 507

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

LeetCode 234. 回文链表(golang实现)

经典的链表问题 判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 复制代码 示例 2: 输入: 1->2->2->1 输出: true 复制代码这里使用golang耍一遍,原理是一样,语言只是其次。 使用快慢指针解决 慢指针 指向头部 快指针 指向第二个节点 循环遍历链表,快指针每次走两个节点,慢指针每次走一个节点,当快指针遍历完链表,...

weixin_33692284的博客 359

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

力扣234--回文链表问题 Go 语言实现

判断该链表是否为回文链表。回文链表是指正着读和反着读都一样的链表。// 边界情况处理:空链表或单节点链表一定是回文。对于偶数长度链表:慢指针位于后半部分的第一个节点。// 步骤1:使用快慢指针找到链表中点。当快指针到达链表末尾时,慢指针正好位于链表中点。初始: 1 → 2 → 3 → 2 → 1。反转后,后半部分链表的方向与前半部分相反。// 步骤2:反转后半部分链表。// 使用快慢指针找到链表中点。逐个比较: 1=1, 2=2, 3=3。函数反转从慢指针开始的后半部分链表。

2502_93365655的博客 763

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

234. 回文链表、Leetcode的Go实现

博客主页:🏆看看是李XX还是李歘歘🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗点关注不迷路,总有一些📖知识点📖是你想要的💗 ⛽️今天的内容是 Leetcode 234. 回文链表 ⛽️💻💻💻 234. 回文链表 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head = [1,2,2,1] 输出:true 示例 2: 输入:he...

分享包括但不限于计算机基础知识、数据结构与算法、Golang技术栈。年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及! 532

LeetCode:234. 回文链表(Go实现)

请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/palindrome-linked-list 著...

Kevin的博客 303

【Day 17】234.回文链表 141.环形链表 142.环形链表II

234.回文链表 && 141.环形链表 && 142.环形链表II

2301_80182689的博客 802

golang力扣leetcode 234.回文链表

234.回文链表234.回文链表题解代码 234.回文链表 234.回文链表 题解 思路:取中点分成两个链表,翻转第二个,开始比较,注意其中一个为nil就可以停止了,因为有可能节点为奇数的情况 代码 package main type ListNode struct { Val int Next *ListNode } func findMiddle(head *ListNode) *ListNode { slow := head fast := head.Next for fast !=

清风 753

用go实现-回文链表

摘要:本文介绍了判断单链表是否为回文链表的算法。算法采用快慢指针找到链表中间节点,反转后半部分链表,然后比较前后两部分节点的值是否相等。该方法满足O(n)时间复杂度和O(1)空间复杂度的要求。代码实现包括边界处理、快慢指针定位、链表反转和比较验证等步骤,并提供了多个测试用例验证算法正确性。该解法适用于处理节点数在1到10^5范围内的链表。

2402_84347832的博客 1082

234. 回文链表、Leetcode的Python实现

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true;否则,返回 false。找到链表中点,并记录前半部分的值,对比中点后链表和前半段记录下的值 (注意链表总数奇偶):此处省略。先遍历链表,值保存在slice,后判断slice是否回文:此处省略。234. 回文链表 ⛽️💻💻💻。链表中节点数目在范围[1, 105] 内。输入:head = [1,2,2,1]输入:head = [1,2]

分享包括但不限于计算机基础知识、数据结构与算法、Golang技术栈。年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及! 619

【Golang】LeetCode 234. 回文链表

基于 Golang 解决 LeetCode 234. 回文链表。用到的思路包括快慢指针以及反转链表。

YGGP的博客 269

Go 算法 leetcode234 回文链表

算法 leetcode234 回文链表题目答案 题目 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 答案 /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func isPalindrome(head *ListNode) bool { if head

kucfire 415

Golang 重返Leetcode战场之旅(Leetcode Go总结博客)

Golang 重返Leetcode战场之旅

Love 6's Private Blog 1176

LeetCode 打卡 Day 60 —— 234. 回文链表

首先想到的是根据当前链表构建一个反向链表

weixin_41804479的博客 338

力扣234:回文链表

力扣234:回文链表

2501_93048002的博客 183
上一篇: leetcode 142. 环形链表 II golang实现
下一篇: leetcode 283. 移动零 golang实现
tzh_linux
博客等级 码龄12年 12粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值