题解 | #判断一个链表是否为回文结构#

判断一个链表是否为回文结构

https://www.nowcoder.com/practice/3fed228444e740c8be66232ce8b87c2f

package main

import . "nc_tools"

/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param head ListNode类 the head
 * @return bool布尔型
 */
func isPail(head *ListNode) bool {
	// 直接返回
	if head == nil || head.Next == nil {
		return true
	}
	// 如何能快速对比前后呢
	// 而且需要判断两个数字是否能构成回文串?
	// 1. 先找到链表的中点
	// 2. 中点以后得链表进行翻转
	// 3. 对比是否能构成回文
	length := 0
	newHead := head
	for newHead != nil {
		length++
		newHead = newHead.Next
	}
	mid := (length + 1) / 2
	midHead := head
	// 找到中点
	for mid > 0 {
		midHead = midHead.Next
		mid--
	}
	flag := true
	isPailTwolist(head, midHead, &flag)

	return flag

}

// 判断两个链表,头尾是否能构成回文
func isPailTwolist(left *ListNode, right *ListNode, flag *bool) {
	if right == nil {
		return
	}
	isPailTwolist(left, right.Next, flag)
	// log.Println("left:", left.Val, "right:", right.Val)
	*flag = *flag && (left.Val == right.Val)
	// 直接修改指向的内容,但是方法比较trick
	left.Val = left.Next.Val
	left.Next = left.Next.Next
}


全部评论

相关推荐

bg 为 985 本应届生,方向是嵌入式软件。纠结了很久,两边都不太了解,恳请各位大佬帮选,非常感谢🙏。
ResourceUtilization:求稳海能达,趁着年轻赚它一笔就relink吧,有个疑惑,怎么睿连同岗位多这么多base原因吗
点赞 评论 收藏
分享
小厂面经,也是我的处女面(30min)1.自我介绍2.spring boot的自动装配原理(好多类和接口的单词都忘了全称是啥了,就说了记得的单词,流程应该说对了吧)3.有用过redis吗?主要是用在实现什么功能(说了技术派用redis的zset来实现排行榜)5.有了解过Redisson吗?讲一下对于分布式锁的了解以及在什么场景下应用(说了秒杀场景)6.对mysql有了解吗?包括它的索引优化和创建(把想起来的全说了)7.了解设计模式吗?比如单例模式,为什么要使用单例模式,它的优点是什么(昨天刚看的设计模式)8.工厂模式有了解吗?主要的使用场景是?(也是昨天刚看的)9.场景题:有7个服务器,需要在早上十点定时的向数据库中的用户表中的用户发短信,如果做到发送的消息不重复,且如果发送失败了需要知道是到哪个用户失败了,这样下次就直接从这个用户开始(我答了用spring task来实现定时,用分布式锁来保证只有一份服务器可以发送消息,用消息队列来存储消息,然后用消息确认机制来保证错误信息的记录,以及在数据库或者业务层面完成消息消费的幂等性)10.场景题:如果在系统启动的时间就将数据库的所有用户相关的信息都读到一个hashmap中(这个没啥思路,没答好)27届的投了一个星期终于有一个面试了,大部分公司都只招26的
inari233:已oc,拒了
查看9道真题和解析
点赞 评论 收藏
分享
03-10 20:35
已编辑
武汉大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务