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
题目不允许翻转链表,不然通过链表的反转,就可以把题目变成leetcode的第二个题目,2. Add Two Numbers
提到链表的反转,自然而然的就可以想到运用 stack来处理这个问题。接下来用python来写,list的pop函数来实现这个后进先出。代码如下:
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
list1,list2=[],[]
while l1:
list1.append(l1.val)
l1=l1.next
while l2:
list2.append(l2.val)
l2=l2.next
c=0
p=ListNode(0)
while list1 and list2:
x=list1.pop()+list2.pop()+c
c,x=x//10,x%10
y=ListNode(x)
y.next=p.next
p.next=y
list3=list1+list2
while list3:
x=list3.pop()+c
c,x=x//10,x%10
y=ListNode(x)
y.next=p.next
p.next=y
if c:
y=ListNode(1)
y.next=p.next
p.next=y
return p.next