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

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

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
}


全部评论

相关推荐

10-07 20:48
门头沟学院 Java
不敢追175女神:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务