Problem: 2. 两数相加
文章目录
- 思路
- 解题方法
- 复杂度
- Code
思路
看到这一题,第一反应是分别遍历两个链表,用列表来存储数,先把两个数的值拿到,转为具体数之后进行相加,再把两数相加值转为列表,再转为链表返回结果。是比较常规和直接的做法。
解题方法
1、用两个列表来存储两个值
2、两个列表拿到后,转为字符串
3、再把字符串放到列表中
4、列表每次弹出最后一个值,加入新的链表节点。直到列表为空。(记得要做字符串和整数的类型转换)
复杂度
时间复杂度:
O ( n ) O(n) O(n)
空间复杂度:
O ( n ) O(n) O(n)
Code
# 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]:num1, num2 = [], []while l1:num1.insert(0, l1.val)l1 = l1.nextwhile l2:num2.insert(0, l2.val)l2 = l2.nextnum1 = int("".join(map(str, num1)))num2 = int("".join(map(str, num2)))sum_num = str(num1 + num2)sum_list = []for char in sum_num:sum_list.append(char)head = p = ListNode(None)while len(sum_list)>0:p.next = ListNode(int(sum_list.pop(-1)))p = p.nextreturn head.next