思路: leetcode中已经设置了链表,只需遍历两个待相加的列表,逐次相加即可。 思想: 分为三种情况,
两个相加的数长度相等,逐个遍历进行相加。需处理满10进1,设置一个flag列表处理对应位置相加后-10的结果。便于遍历下一个位置时进行相加。(即处理进1的操作)。两个数不等。提前一个结束在上述现象中,即不论相等或者是不相等,均需要处理一种情况,即两个数的各个位置处理完后仍然需要进1的情况,即99 + 9的情况。9+9的情况。这些情况需要单独处理。 下面是代码,亲测可用 关键: 设置一个临时变量,temp。在创建的新链表中起到连接作用。 下述关键代码的解释: temp.next = list1#用于两个节点之间的连接 temp = list1#temp是最后一个节点 实现先连接后移动。(链表的思想) class Solution: def addTwoNumbers(self, l1, l2): count = 0 cur1 = l1 cur2 = l2 flag = [] temp = None while cur1 is not None or cur2 is not None: # print(cur1.data) # print(cur2.data) # print(cur1.next1.data) # print(cur2.next1.data) if cur1 is not None and cur2 is not None: sum1 = cur1.val + cur2.val if count > 0: sum1 += flag[count - 1] if sum1 >= 10: sum1 = sum1 - 10 flag.append(1) else: flag.append(0) list1 = ListNode(sum1) if temp is None: list1 = ListNode(sum1) temp = list1 head = list1 else: temp.next = list1#用于两个节点之间的连接 temp = list1# count += 1 cur1 = cur1.next cur2 = cur2.next if cur1 == None and cur2 == None:#处理两个数字都没有时,还有进位的情况 if flag[count - 1] != 0: list1 = ListNode(flag[count - 1]) temp.next = list1 else: pass elif cur1 is None: sum1 = cur2.val if count > 0: sum1 += flag[count - 1] if sum1 >= 10: sum1 = sum1 -10 flag.append(1) else: flag.append(0) list1 = ListNode(sum1) if temp is None: list1 = ListNode(sum1) temp = list1 head = list1 else: temp.next = list1 temp = list1 count += 1 # cur1 = cur1.next cur2 = cur2.next if cur2 == None: if flag[count - 1] != 0: list1 = ListNode(flag[count - 1]) temp.next = list1 else: pass elif cur2 is None: sum1 = cur1.val if count > 0: sum1 += flag[count - 1] if sum1 >= 10: sum1 = sum1 - 10 flag.append(1) else: flag.append(0) list1 = ListNode(sum1) if temp is None: list1 = ListNode(sum1) temp = list1 head = list1 else: temp.next = list1 temp = list1 count += 1 cur1 = cur1.next # cur2 = cur2.next if cur1 == None: if flag[count - 1] != 0: if flag[count - 1] != 0: list1 = ListNode(flag[count - 1]) temp.next = list1 else: pass # print(sum1) # list1.next = None # sum_node1 = Node(sum1) return head效果较好: