上一个复制错了
type ListNode2 struct {
Val int
Next *ListNode2
}
type Stack struct {
Head *ListNode2
Tail *ListNode2
}
func push(stack *Stack, nodev int) {
var node ListNode2
node.Val = nodev
node.Next = nil
if stack.Tail == nil {
stack.Head = &node
stack.Tail = &node
return
}
node.Next = stack.Head
stack.Head = &node
}
func pop(stack *Stack) int {
if stack.Head == nil {
return -1
}
s := stack.Head.Val
stack.Head = stack.Head.Next
return s
}
func isValid(s string) bool {
var stack Stack
m := map[int]int{
'(': ')',
'{': '}',
'[': ']',
}
for _, t := range s {
v, ok := m[int(t)]
if ok {
push(&stack, int(t))
} else {
v, ok = m[pop(&stack)]
if !ok {
return false
} else if v == int(t) {
continue
} else {
return false
}
}
}
if stack.Head == nil {
return true
} else {
return false
}
}
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
if l1.Next == nil && l1.Val == 0 {
return l2
}
if l2.Next == nil && l2.Val == 0 {
return l1
}
var pcur, pfront, pcur2 *ListNode
var nfront ListNode
nfront.Val = 0
nfront.Next = nil
pcur = &nfront
pfront = pcur
var sum int
for l1 != nil || l2 != nil {
x, y := 0, 0
if l1 != nil {
x = l1.Val
}
if l2 != nil {
y = l2.Val
}
pcur.Val = (x + y + sum) % 10
fmt.Print(x, y, sum, pcur.Val)
var nnext ListNode
pcur.Next = &nnext
pcur2 = pcur
pcur = &nnext
sum = (x + y + sum) / 10
//fmt.Print(pcur.Val)
//fmt.Print(sum)
if l1 != nil {
l1 = l1.Next
}
if l2 != nil {
l2 = l2.Next
}
}
if sum == 1 {
pcur.Val = 1
}
//fmt.Print(pcur.Val)
if pcur.Val == 0 {
pcur2.Next = nil
}
return pfront
}
//是否有环
func hasCycle(head *ListNode) bool {
var slow, fast *ListNode
slow = head
fast = head
for fast != nil && fast.Next != nil {
slow = slow.Next
fast = fast.Next.Next
if fast == slow {
return true
}
}
return false
}
展开