#################################
""" 2. 两数相加 给出两个非空的链表用来表示两个非负的整数。 其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 """ """ 分析: 其实就是我们手写加法运算的步骤, 同位相加,然后大于10就是进一位, 因为最后返回一个链表,所以需要你新建一个链表,这个链表有多个节点,节点类已经在注释里面了, 因为你要操作链表不同的值,所以你需要一个指针, 因为你需要解决同位的和,所以你需要一个temp保存这个和, 因为你需要解决进位的问题,所以你需要对和进行操作,temp%10,余数就是本位,temp//10,取商就是进位 因为最后你需要保存整个链表,所以把初始化的头元素去掉, """ # Definition for singly-linked list. class ListNode(object): def __init__(self, x): self.val = x self.next = None class Solution(object): def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ l3h = ListNode(0) # 头元素 l3 = l3h # 指针指向头元素,他们是同一个内存空间, temp = 0 # 用来保存同位的和 while l1 or l2 or temp: # temp处理进位的问题,如果temp有值就是上一位进位得来的, if l1: temp += l1.val l1 = l1.next # 每次循环之后就把链表缩短,到最后就是none if l2: temp += l2.val l2 = l2.next l3.next = ListNode(temp%10) # 这就是处理完同位和的问题了, # 处理完成了之后,需要做两件事, # 1是指针后移 # 2是处理进位的问题, l3 = l3.next # 每次操作 temp = temp//10 return l3h.next
###################################
####################################
######################################