两个链表生成相加链表
思路
- 先将两个链表分别反转
- 从头部开始相加(注意进位及一个链表遍历完的情况)
- 再将相加后的链表反转
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def reverse(p):
pre = p
tail = None
while p:
pre = pre.next
p.next = tail
tail = p
p = pre
return tail
def one_list(p1,pr,add):
while p1:
r = p1.val + add
if r >= 10:
add = 1
r = r - 10
else:
add = 0
pr.next = ListNode(r)
pr = pr.next
p1 = p1.next
if add:
pr.next = ListNode(add)
pr = pr.next
return pr
class Solution:
def addInList(self , head1 , head2 ):
if not head1: return head2
if not head2:return head1
p1 = reverse(head1)
p2 = reverse(head2)
pr = ListNode(None)
ph = pr
add = 0
while p1 and p2:
r = p1.val + p2.val + add
if r >= 10:
add = 1
r = r - 10
else:
add = 0
pr.next = ListNode(r)
pr = pr.next
p1 = p1.next
p2 = p2.next
if p1:
pr = one_list(p1,pr,add)
if p2:
pr = one_list(p2,pr,add)
p = ph.next
return reverse(p)