diff --git a/main.go b/main.go index fb9509f..94d2588 100644 --- a/main.go +++ b/main.go @@ -1,55 +1,91 @@ package main -import "fmt" +import ( + "fmt" + "strconv" + "strings" +) -// ListNode Definition for singly-linked list. -type ListNode struct { - Val int - Next *ListNode -} +//type Test interface { +//} +// +//func condTest(cond *sync.Cond) { +// cond.L.Lock() +// cond.Wait() +// fmt.Println("condTest") +// cond.L.Unlock() +//} +//func chanTest(ch chan<- *Test) { +// +//} -func isPalindrome(head *ListNode) bool { - srcHead := head - head = head.Next - // var left, right *ListNode - cnt := 1 - for head != nil { - head = head.Next - cnt++ +func reverse(x int) int { + neg := false + if x < 0 { + neg = true + x = -x } - 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 + s := fmt.Sprintf("%d", x) + var sb strings.Builder + for i := len(s) - 1; i >= 0; i-- { + sb.WriteByte(s[i]) } - if cnt&1 == 1 { - head = head.Next + s = sb.String() + var ans int32 = 0 + for c := range s { + t, _ := strconv.ParseUint(string(s[c]), 10, 16) + ans = ans*10 + int32(t) } - for head != nil && lastNode != nil { - if head.Val != lastNode.Val { - return false + if neg { + ans = -ans + x = -x + } + s1, s2 := fmt.Sprintf("%d", x), fmt.Sprintf("%d", ans) + if neg { + s1 = s1[1:] + s2 = s2[1:] + } + if len(s1) != len(s2) { + for len(s2) < len(s1) { + s2 = "0" + s2 } - head = head.Next - lastNode = lastNode.Next } - if head != nil || lastNode != nil { - return false + for i := 0; i < len(s1); i++ { + if s1[i] != s2[len(s2)-1-i] { + return 0 + } } - return true + return int(ans) } +//9646324351 +//2147483648 + func main() { - isPalindrome := isPalindrome(&ListNode{ - Val: 1, - Next: &ListNode{ - Val: 2, - }, - }) - fmt.Printf("isPalindrome: %v\n", isPalindrome) + fmt.Println(reverse(1534236469)) + //var x int = 16 + //var y any = x + //if _, ok := y.(int); ok { + // fmt.Println(x) + //} + //if _, ok := y.(int32); ok { + // fmt.Println(x) + //} + //var mu sync.Mutex + //sync.NewCond(&mu) + //make(chan *Test, 6) + //var wg sync.WaitGroup + //wg.Add(1) + //wg.Done() + //var mu sync.Mutex + //cond := sync.NewCond(&mu) + // + //go condTest(cond) + //go condTest(cond) + // + //time.Sleep(time.Second * 2) + //cond.L.Lock() + //cond.Broadcast() + //cond.L.Unlock() + //time.Sleep(time.Second * 2) }