go-test/main.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)
}