题解 | #判断一个链表是否为回文结构#
判断一个链表是否为回文结构
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
}

查看17道真题和解析