版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28306361/article/details/87628322
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order 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.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = 807.
代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def addTwoNumbers(self, l1: 'ListNode', l2: 'ListNode') -> 'ListNode':
if l1 == None:
return l2
if l2 == None:
return l1
returnlist = ListNode(0)
head = returnlist
point1 = l1
point2 = l2
carry = 0
while point1 != None and point2 != None:
if point1.val + point2.val + carry >= 10:
returnlist.val = (point1.val + point2.val + carry) % 10
carry = 1
else:
returnlist.val = (point1.val + point2.val + carry)
carry = 0
if carry == 0 and point1.next == None and point2.next == None:
return head
else:
newNode = ListNode(0)
returnlist.next = newNode
if point1 != None:
point1 = point1.next
if point2 != None:
point2 = point2.next
returnlist = returnlist.next
while point1 != None:
if carry + point1.val >= 10:
returnlist.val = (carry + point1.val) % 10
carry = 1
else:
returnlist.val = carry + point1.val
carry = 0
point1 = point1.next
if point1 != None or carry == 1:
returnlist.next = ListNode(0)
returnlist = returnlist.next
while point2 != None:
if carry + point2.val >= 10:
returnlist.val = (carry + point2.val) % 10
carry = 1
else:
returnlist.val = carry + point2.val
carry = 0
point2 = point2.next
if point2 !=None or carry == 1:
returnlist.next = ListNode(0)
returnlist = returnlist.next
if carry == 1 and point1 == None and point2 == None:
returnlist.val += 1
return head
return head