题目描述
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
1、嵌套
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode, c=0) -> ListNode:
if l1 or l2 or c:
v1 , v1_next = (l1.val , l1.next) if l1 else (0, None)
v2 , v2_next = (l2.val , l2.next) if l2 else (0, None)
_sum = v1+v2+ c
carry = _sum//10
temp = ListNode(_sum % 10)
temp.next = self.addTwoNumbers(v1_next, v2_next,carry)
return temp
else :
return
2、while遍历
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
#定义表头
temp = ListNode(0)
l = temp
carry = 0
while l1 or l2 :
v1 = l1.val if l1 else 0
v2 = l2.val if l2 else 0
s = v1+v2+carry
l.next = ListNode(s%10)
l = l.next
carry = s//10
if(l1!=None):l1=l1.next
if(l2!=None):l2=l2.next
if(carry>0):
l.next=ListNode(1)
return temp.next
链表相关
1、定义链表
# Definition for singly-linked list.
class ListNode(object):
def __init__(self):
self.val = None
self.next = None
2、对链表进行操作
class ListNode_handle:
def __init__(self):
self.cur_node = None
def add(self, data):
#add a new node pointed to previous node
node = ListNode()
node.val = data
node.next = self.cur_node
self.cur_node = node
return node
def print_ListNode(self, node):
while node:
print '\nnode: ', node, ' value: ', node.val, ' next: ', node.next
node = node.next
def _reverse(self, nodelist):
list = []
while nodelist:
list.append(nodelist.val)
nodelist = nodelist.next
result = ListNode()
result_handle = ListNode_handle()
for i in list:
result = result_handle.add(i)
return result