HTMLify

LeetCode - Add Two Numbers II - Go
Views: 10 | Author: abh
// @leet start
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func reverse(head *ListNode) *ListNode {
	var p1, p2, p3 *ListNode
	p3 = head
	for p3 != nil {
		p1 = p2
		p2 = p3
		p3 = p3.Next
		p2.Next = p1
	}
	return p2
}

func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
	l1 = reverse(l1)
	l2 = reverse(l2)
	var ans, ans_h *ListNode
	var carry int
	for l1 != nil && l2 != nil {
		var n ListNode
		n.Val =  (l1.Val + l2.Val + carry) % 10
		carry = (l1.Val + l2.Val + carry) / 10
		if ans == nil {
			ans = &n
			ans_h = ans
		} else {
			ans.Next = &n
			ans = ans.Next
		}
		l1 = l1.Next
		l2 = l2.Next
	}
	for l1 != nil {
		var n ListNode
		n.Val = (l1.Val + carry) % 10
		carry = (l1.Val + carry) / 10
		ans.Next = &n
		ans = ans.Next
		l1 = l1.Next
	}
	for l2 != nil {
		var n ListNode
		n.Val = (l2.Val + carry) % 10
		carry = (l2.Val + carry) / 10
		ans.Next = &n
		ans = ans.Next
		l2 = l2.Next
	}
	for carry != 0 {
		var n ListNode
		n.Val = carry % 10
		carry = carry / 10
		ans.Next = &n
		ans = ans.Next
	}
	ans = reverse(ans_h)
	return ans
}
// @leet end

Comments