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了。

你可能感兴趣的:(leetcode之两数相加Golang)