# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
#没啥想法。。就模拟加法。。
class Solution:
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
len1 = 0
len2 = 0
head1 = l1#留下头结点
head2 = l2
lis = ListNode(0)
while(head1!=None):#求一下长度,虽然也可以用while (l1!=None):来解决,但我还是求了
head1 = head1.next
len1 += 1
while(head2!=None):
head2 = head2.next
len2 += 1
head1 = l1
head2 = l2
headlis = lis
if(len1>=len2):#没啥好说的。。下面都都是简单的代码。。
for i in range(len2):
headlis.val = head1.val + head2.val + headlis.val
head1 = head1.next
head2 = head2.next
if(len1!=len2):
if(headlis.val>=10):
headlis.val = headlis.val - 10
headlis.next = ListNode(1)
headlis = headlis.next
else:
headlis.next = ListNode(0)
headlis = headlis.next
if(len1==len2):
if(headlis.val>=10):
headlis.val = headlis.val - 10
headlis.next = ListNode(1)
headlis = headlis.next
else:
if(i<len2-1):
headlis.next = ListNode(0)
headlis = headlis.next
for i in range(len2,len1):
headlis.val = head1.val + headlis.val
head1 = head1.next
if(headlis.val>=10):
headlis.val = headlis.val - 10
headlis.next = ListNode(1)
headlis = headlis.next
elif(i<len1-1):
headlis.next = ListNode(0)
headlis = headlis.next
if(len1<len2):
for i in range(len1):
headlis.val = head1.val + head2.val + headlis.val
head1 = head1.next
head2 = head2.next
if(headlis.val>=10):
headlis.val = headlis.val - 10
headlis.next = ListNode(1)
headlis = headlis.next
else:
headlis.next = ListNode(0)
headlis = headlis.next
for i in range(len1,len2):
headlis.val = head2.val + headlis.val
head2 = head2.next
if(headlis.val>=10):
headlis.val = headlis.val - 10
headlis.next = ListNode(1)
headlis = headlis.next
elif(i<len2-1):
headlis.next = ListNode(0)
headlis = headlis.next
return lis
'''
这里比较难受的就是,我以为它传给我的是一个带有表头的链表(即第一个节点值为空,指针往下指),然鹅并不是。
后来我发现,在LeetCode里面可以用print输出。。我太tm开心了。。
最后膜拜了一下大佬的代码
rem = 0
dummy = ListNode(0)
p = dummy
while l1 or l2 or rem:
s = (l1.val if l1 else 0) + (l2.val if l2 else 0) + rem
rem = s/10
p.next = ListNode(s%10)
p = p.next
if l1:
l1 = l1.next
if l2:
l2 = l2.next
return dummy.next
'''