给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
本来我的思路是提取出这两个数字,然后将它们逆序相加,然后再逆序编程指定的形式,不知道为什么非要创建链表,但是后来请教了别人,创建链表的原因是相加的数字可能非常非常大,超过 int32 甚至 int64 的位数,而要求精确值所以又不敢用 double,所以就要自己创建链表模拟全加器。
接下来我们来用python实现链表
首先,定义节点类Node:
class Node:
'''
data: 节点保存的数据
_next: 保存下一个节点对象
'''
def __init__(self, data, pnext=None):
self.data = data
self._next = pnext
def __repr__(self):
'''
用来定义Node的字符输出,
print为输出data
'''
return str(self.data)
代码:
#class ListNode:
#def __init__(self, x):
#self.val = x
#self.next = None
class Solution:
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
# 创建一个节点,其中有两个指针,dummy用来输出最后的结果,cur用来移动指针
dummy = cur = ListNode(0)
# carry 用来计算数字加和和表示进位
carry = 0
while l1 or l2 or carry:
if l1:
carry += l1.val
l1 = l1.next
if l2:
carry += l2.val
l2 = l2.next
# 计算当前位的数字加和:0~9
cur.next = ListNode(carry % 10)
cur = cur.next
# 用来表示进位
carry = carry // 10
return dummy.next
总结:由于本人数据结构不是很熟悉,所以也算是学习着用python练习数据结构,创建链表啊之类的,慢慢学吧~