【Leetcode】数据结构-链表-2

136 阅读1分钟

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.没考虑到两个链表不一样长