首页 > 代码库 > 445. Add Two Numbers II ——while s1 or s2 or carry 题目再简单也要些测试用例

445. Add Two Numbers II ——while s1 or s2 or carry 题目再简单也要些测试用例

You are given two linked lists representing two non-negative numbers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Follow up:
What if you cannot modify the input lists? In other words, reversing the lists is not allowed.

Example:

Input: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 8 -> 0 -> 7
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
Input: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 8 -> 0 -> 7

7->2->4->3
   5->6->4
=-------------
7->7->0->7
 ->1       
        """
        s1,s2 = [],[]
        p1,p2 = l1,l2
        while p1:
            s1.append(p1.val)
            p1 = p1.next
        while p2:
            s2.append(p2.val)
            p2 = p2.next
        carry = 0
        fake_head = ListNode(None)
        while s1 or s2 or carry:
            v1 = s1.pop() if s1 else 0
            v2 = s2.pop() if s2 else 0
            val = v1 + v2 + carry
            if val >= 10:
                val -= 10
                carry = 1
            else:
                carry = 0
            head = ListNode(val)
            head.next = fake_head.next
            fake_head.next = head
        return fake_head.next                

 

445. Add Two Numbers II ——while s1 or s2 or carry 题目再简单也要些测试用例