LeetCode-[中级]-2. 两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
链表结构示例
示例1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例2:
输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:
示例3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
我的解法:
# 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: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
def parse_list_to_int(list_head: Optional[ListNode]):
"""
把列表解析为数字
"""
my_list_statck = []
current_node = list_head
# 先将整个列表压入列表
while current_node is not None:
my_list_statck.append(current_node.val)
current_node = current_node.next
# 将列表转置,这样2->4->3这样的链表就被转换为[3,4,2]这样的数组了
my_list_statck.reverse()
num = 0
# 累乘法拼接成为最终的整形:342
for i in my_list_statck:
num *= 10
num += i
return num
def parse_int_into_reverse_list(num: int):
"""
把数字转换为转置链表
:param num: 比如123
:return:
"""
# 把数字转为形如['1','2','3']的数组
result_list = list(str(num))
# 按照题目要求对数字各个位数进行转置
result_list.reverse()
# 判空处理
if result_list.__len__() == 0:
return ListNode(0)
# 遍历转置后的数组,每一个数组元素形成一个ListNode,拼接成链表
head_node = ListNode(int(result_list[0]))
# 标记当前链表尾结点
cur_node = head_node
list_len = len(result_list)
for i in range(1, list_len):
temp_node = ListNode(int(result_list[i]))
cur_node.next = temp_node
cur_node = temp_node
return head_node
num1 = parse_list_to_int(l1)
num2 = parse_list_to_int(l2)
result = num1 + num2
return parse_int_into_reverse_list(result)

墨笑
如果我的文章能帮到你,还请不吝打赏,五块三块不嫌多,一块五毛不嫌少
版权属于:
墨笑的精神小憩之地 的博客
本文链接:
https://www.whisperdiary.cn/index.php/archives/70/
作品采用:
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可
推荐阅读
评论已关闭