题目:
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = 807.
代码:
# Definition for singly-linked list.
# 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
"""
i1=0
sum1=0
h1=l1
h2=l2
while(h1):
sum1+=h1.val*(10**i1)
i1+=1
h1=h1.next
i2=0
sum2=0
while(h2):
sum2+=h2.val*(10**i2)
i2+=1
h2=h2.next
sum1+=sum2
h = ListNode(sum1%10)
node=h
sum1=sum1//10
while(sum1):
tmp=ListNode(sum1%10)
sum1=sum1//10
node.next = tmp
node = node.next
return h
分析:
该题将链表看做数字,大数在尾,小数在头,计算两个链表所代表的数字之和再转化成链表。该题有两种解法,一是将每个链表转化成数字,然后计算和,最后在转化成链表。二是直接以链表的形式相加,从头开始,只需要判断是否需要进一,我采用的是第一种方法,虽然复杂度高了一些,但是比较利于理解。sum1和sum2就是两个链表所代表的数字,加在一起后得到的和就是我们最后需要用链表所表示的数字。