2.两数相加(题解)

两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

2.两数相加(题解)_第1张图片
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

输入:l1 = [0], l2 = [0]
输出:[0]

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

提示:

每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零

Problem: 2. 两数相加

思路

首先这道题是利用两个单链表进行操作,排除各种特殊情况,只需要设置两个指针,t1和t2,分别指向输入的两个单链表,通过将t1.val+t2.val的值赋值给一个新的结点,之后将节点连接起来便解决了。其中特殊情况有:
①t1.val+t2.val会大于10,此时要保存对10取余的结果到新节点上;并且设置一个进位变量jin,每次的求和改为t1.val+t2.val+jin;jin变量在每次求和判断不大于10的时候就要赋值为0,相反则赋值为1。
②每个节点连接起来,这个时候需要两个节点lq和lb,lq表示上个节点,lb表示当前节点,在把计算结果赋值到lb中后,让lq指向lb,之后再让lq=lb这样通过循环就能连接起来了。
③输入的两个单链表长度可能不同,所以再完成了①和②两步后,创建一个指针con等于较长的那个单链表,需要再次创建一个循环,循环中只需要con.val+jin赋值给lb.val。

复杂度

  • 时间复杂度:

添加时间复杂度, 示例: O ( m a x ( n + m ) ) O(max(n+m)) O(max(n+m))

  • 空间复杂度:

添加空间复杂度, 示例: O ( m a x ( n + m ) ) O(max(n+m)) O(max(n+m))

Code


# 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
        """
        l3=ListNode()
        now=l1.val+l2.val
        jin=0
        if now>=10:
            jin=1
            now=now%10
        l3.val=now
        lq=ListNode()
        lq=l3
        t1=l1.next
        t2=l2.next
        while (t1!=None and t2!=None):

            lb=ListNode()

            t3=t1.val+t2.val+jin
            if t3>=10:
                t3=t3-10
                jin=1
            else:
                jin=0
            
            lb.val=t3

            lq.next=lb
            lq=lb

            t1=t1.next
            t2=t2.next

        con=None
        if t1!=None or t2!=None:
            if t1!=None:
                con=t1
            elif t2!=None:
                con=t2
        
        while (con!=None):
            
            lb=ListNode()

            t3=con.val+jin
            if t3>=10:
                t3=t3%10
                jin=1
            else:
                jin=0
            
            lb.val=t3

            lq.next=lb
            lq=lb

            con=con.next
        
        if jin==1:
            lb=ListNode()
            lb.val=1
            lq.next=lb
            lq=lb
        return l3


你可能感兴趣的:(力扣刷题,python,算法,数据结构,链表)