leetcode-2-Add-Two-Numbers

leetcode 2

两个链表加和,模拟大数加法。
http://www.jianshu.com/p/5d8f13225adf

python 链表:

class ListNode(object):
def __init__(self, x):
    self.val = x
    self.next = None

a, a.next, a.next.next = ListNode(2), ListNode(4), ListNode(3)
b, b.next, b.next.next = ListNode(5), ListNode(6), ListNode(4)

print a.val
print a.next.val

代码:

class Solution(object):
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        sum=ListNode(0)#sum是
        ptr=sum
        carry=0     #carry是进位,var是当前位
        while l1 or l2:
            val=carry   #获得进位信息
            if l1:
                val+=l1.val
                l1=l1.next
            if l2:
                val+=l2.val
                l2=l2.next
            carry=val/10, val=val%10
            ptr.next=ListNode(val)  #这一位的结果
            ptr=ptr.next    #下一位

        #highest position
        if carry==1:
            ptr.next=ListNode(1)

        return sum.next #为啥要sum.next, sum.next还是这一位的结果,ptr已经移动到是next.next了,ptr是一个提前一位的指针。