leetcode之两数相加Golang
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
carry := 0
flag := true
tmpL1, tmpL2, tmpSum := 0, 0, 0
head := &ListNode{
Val: 0,
Next: nil,
}
tail := head
Begin:
if l1 != nil || l2 != nil || carry == 1 {
if l1 == nil {
tmpL1 = 0
} else {
tmpL1 = l1.Val
l1 = l1.Next
}
if l2 == nil {
tmpL2 = 0
} else {
tmpL2 = l2.Val
l2 = l2.Next
}
tmpSum = tmpL1 + tmpL2 + carry
carry = tmpSum / 10
tmpSum %= 10
if flag {
head.Val = tmpSum
flag = false
} else {
node := &ListNode{
Val: tmpSum,
Next: nil,
}
// tail = head
// for tail.Next != nil {
// tail = tail.Next
// }
tail.Next = node
tail = tail.Next
}
goto Begin
} else {
return head
}
}
1、第一个问题是在产生返回的链表的时候,总是只有第一个节点,而没有后面的结点,node1->nil
原因是在代码中使用了head和tail的方法,思路是在将tail->next设置为新的值之后,再将tail指向他,可能是这个顺序搞错了
2、第二个问题是当两个加数分别为5和5的时候,在第一个条件判断`if l1!=nil || l2!=nil || carry==1`这个地方,由于少加了最后一个条件carry==1,那么如果两个加数都为5,得出的结果就是0了。
浙公网安备 33010602011771号