0️⃣python数据结构与算法学习路线 学习内容:
- 基本算法:枚举、排序、搜索、递归、分治、优先搜索、贪心、双指针、动态规划等...
- 数据结构:字符串(string)、列表(list)、元组(tuple)、字典(dictionary)、集合(set)、数组、队列、栈、树、图、堆等...
题目:
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
输入输出:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解题思路:
遍历每一个节点,相加,注意进位和链表长度
算法实现:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
add = p = ListNode(None)
s = 0
while l1 or l2 or s:#首位进位
s = (l1.val if l1 else 0) + (l2.val if l2 else 0)+s
p.next=ListNode(s%10)
p = p.next
s//=10
l1= l1.next if l1 else None
l2= l2.next if l2 else None
return add.next
出现问题:
1.链表定义:
2.while l1 or l2 就会循环提取l1,l2中的数字
3.s%10 取余数 s//10 取进位
4.l1.val if l1 else 0 不使用括号
5.直接通过s判断是否进位
没考虑到的问题:
1.没看到进位问题
2.没考虑到两个链表不一样长