56 lines
872 B
Go
56 lines
872 B
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
// ListNode Definition for singly-linked list.
|
|
type ListNode struct {
|
|
Val int
|
|
Next *ListNode
|
|
}
|
|
|
|
func isPalindrome(head *ListNode) bool {
|
|
srcHead := head
|
|
head = head.Next
|
|
// var left, right *ListNode
|
|
cnt := 1
|
|
for head != nil {
|
|
head = head.Next
|
|
cnt++
|
|
}
|
|
head = srcHead.Next
|
|
lastNode := srcHead
|
|
srcHead.Next = nil
|
|
half := cnt / 2
|
|
half--
|
|
for range half {
|
|
p := head.Next
|
|
head.Next = lastNode
|
|
lastNode = head
|
|
head = p
|
|
}
|
|
if cnt&1 == 1 {
|
|
head = head.Next
|
|
}
|
|
for head != nil && lastNode != nil {
|
|
if head.Val != lastNode.Val {
|
|
return false
|
|
}
|
|
head = head.Next
|
|
lastNode = lastNode.Next
|
|
}
|
|
if head != nil || lastNode != nil {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
func main() {
|
|
isPalindrome := isPalindrome(&ListNode{
|
|
Val: 1,
|
|
Next: &ListNode{
|
|
Val: 2,
|
|
},
|
|
})
|
|
fmt.Printf("isPalindrome: %v\n", isPalindrome)
|
|
}
|