1. 翻转链表
- 先翻转链表
- 解决链表长度不一问题
- 解决最后的carry进位标志
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
#
#
# @param head1 ListNode类
# @param head2 ListNode类
# @return ListNode类
#
class Solution:
def addInList(self , head1 , head2 ):
# 可以用栈!!!!
# write code here
# 1.reverse the linked list
p1 = head1
p2 = head2
l1 = self.reverseL(p1)
l2 = self.reverseL(p2)
carry = 0
pre = None
while l1 and l2:
posTotal = (l1.val + l2.val + carry)
pos = posTotal % 10
carry = posTotal // 10
newNode = ListNode(pos)
newNode.next = pre
pre = newNode
l1 = l1.next
l2 = l2.next
while l1:
posTotal = (l1.val + 0 + carry)
pos = posTotal % 10
carry = posTotal // 10
newNode = ListNode(pos)
newNode.next = pre
pre = newNode
l1 = l1.next
while l2:
posTotal = (l2.val + 0 + carry)
pos = posTotal % 10
carry = posTotal // 10
newNode = ListNode(pos)
newNode.next = pre
pre = newNode
l2 = l2.next
if carry:
newNode = ListNode(1)
newNode.next = pre
pre = newNode
return pre
def reverseL(self, head1):
pre = None
p = head1
while p:
# I
# 9-> 3->7->None
tmp = p.next
p.next = pre
pre = p
p = tmp
return pre
2. 两个栈
充分利用栈的先进后出的性质解决加法问题
这里就不上代码了