1 题目
2 思想
翻转链表后再做计算,然后再翻转链表。本题要求对链表的翻转操作比较熟练。需要注意的地方:
1)注意进位问题
3 代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
l1 = self.reverseLinkList(l1)
l2 = self.reverseLinkList(l2)
head_l1 = l1
# 执行加法
flag = 0
head = None
while(l1 and l2):
flag ,l1.val = divmod(l1.val + l2.val + flag,10)
head = l1
l1 = l1.next
l2 = l2.next
if l2:
l1 = l2
head.next = l1
while(l1):
flag,l1.val = divmod(l1.val+flag,10)
head = l1
l1 = l1.next
# 如果最后还有进位
if flag :
head.next = ListNode(flag,None)
return self.reverseLinkList(head_l1)
# 翻转链表
def reverseLinkList(self,head):
# 就地翻转
nxt = head.next
pre = None
while(head and nxt):
tmp = nxt.next
head.next = pre # 修改
nxt.next = head
pre = head
head = nxt
nxt = tmp
return head # 返回翻转后的链表