2. 两数相加
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def process(self, node):
num = node.val
i = 1
while node.next != None:
node = node.next
num += node.val * (10**i)
i += 1
return num
def construct(self, num):
num_str = str(num)
length = len(num_str) # 总位数
first_node = ListNode() # 头指针
node = first_node # 第一个结点
len_1 = length - 1 # 用于判定,写循环外可以省时间
for i in range(length):
node.val = int(num_str[length-i-1]) # 赋值
if i == len_1: # 若已经给最后一个结点赋值,则跳出
break
node.next = ListNode() # 构造新结点
node = node.next # 跳转到新结点
return first_node
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
num1 = self.process(l1)
num2 = self.process(l2)
res = num1 + num2
resList = self.construct(res)
return resList
执行用时:80 ms, 在所有 Python3 提交中击败了44.10%的用户
内存消耗:13.7 MB, 在所有 Python3 提交中击败了5.13%的用户
[思路]:
主函数:求出num1, num2, num1+num2(res);将res构造成单链表。
process函数(链表转数字):简单的一层循环。
construct函数(数字转链表):
求出数字位数length;
构造第一个结点及头指针;
循环:倒序生成结点,当给最后一个结点赋值完后break,防止生成多余结点;
return 头指针所指向的结点(第一个结点)。