题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
# 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: ListNode, head2: ListNode) -> ListNode:
# write code here
# 反转链表1,2
pre = None
cur = head1
while cur:
temp = cur.next
cur.next = pre
pre = cur
cur = temp
reverse_head1 = pre
pre = None
cur = head2
while cur:
temp = cur.next
cur.next = pre
pre = cur
cur = temp
reverse_head2 = pre
# 从个位开始诸位详加,并记录进位add
add = 0
dummy_head = ListNode(-1)
cur = dummy_head
rp1, rp2 = reverse_head1, reverse_head2
while rp1 or rp2 or add:
val1 = rp1.val if rp1 else 0
val2 = rp2.val if rp2 else 0
result = add + val1 + val2
add, val = divmod(result, 10)
# rp1, rp2 = rp1.next, rp2.next
if rp1:
rp1 = rp1.next
if rp2:
rp2 = rp2.next
node = ListNode(val)
cur.next = node
cur = cur.next
# 反转结果链表
pre = None
cur = dummy_head.next
while cur:
temp = cur.next
cur.next = pre
pre = cur
cur = temp
return pre
整体思路很好理解:
- 首先反转链表1,2
- 然后诸位相加,并记录进位
- 最后反转结果链表返回即可
这里翻转链表直接背过模板即可。
联想公司福利 1500人发布